Я использую метод JsonConvert.SerializeObject
для сериализации этого объекта:
var objx = new JsonObject
{
["prob1"] = new JsonObject
{
["phone"] = "1019577756",
["name"] = "Jan",
["type"] = "Agent"
}
};
Я использую этот код:
using System.Text.Json.Nodes;
var jsonString = JsonConvert.SerializeObject(objx, Formatting.None,
new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
});
Но я получаю такой результат:
{
"prob1":
{
"phone":
{
"_value": "1019577756",
"Value": "1019577756",
"Options": null
},
"name":
{
"_value": "Jan",
"Value": "Jan",
"Options": null
},
"type"
{
"_value": "Agent",
"Value": "Agent",
"Options": null
}
}
}
Но мне нужно вот так:
{
"prob1":
{
"phone": "1019577756",
"name": "Jan",
"type": "Agent"
}
}
Могу ли я использовать JsonSerializerSettings
, но не знаю, что именно мне нужно сделать
Вместо использования JsonObject почему бы вам не использовать Dictionary<string, ContactInfo>
? Класс ContactInfo содержит такие свойства, как телефон, имя, тип.
Вы смешиваете библиотеку сериализации JSON. JsonObject
— из библиотеки System.Text.Json во время сериализации с помощью Netwonsoft.Json.
Либо полностью реализовать в System.Text.Json:
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Text.Json.Serialization;
var jsonString = JsonSerializer.Serialize(objx,
new JsonSerializerOptions
{
WriteIndented = false,
ReferenceHandler = ReferenceHandler.IgnoreCycles
});
Ссылка: Миграция с Newtonsoft.Json на System.Text.Json
Или полностью реализовать в Newtonsoft.Json:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
var objx = new JObject
{
["prob1"] = new JObject
{
["phone"] = "1019577756",
["name"] = "Jan",
["type"] = "Agent"
}
};
var jsonString = JsonConvert.SerializeObject(objx, Formatting.None,
new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
});
Со мной тоже такое случается время от времени. Многие классы и методы этих двух библиотек очень похожи. Их легко перепутать.
Кажется, вы смешиваете NewtonSoft.Json и System.Text.Json. Если это правда: не надо. Выберите один и попробуйте еще раз.