C # JSON.Net Сериализация Dictonnary проблем с декодированием в стек переполнения

Я ищу способ получить это

{
"parameters": {
"object1": {
"propertie1": "value",
"propertie2": "value"},
"object2": {
"propertie1": "value",
"propertie2": "value"}
}
}

C # у меня есть такой объект

public class MyObject
{
public Dictionnary<string, List < KeyValuePai < string, object > > > parameters = new Dictionnary<string, List < KeyValuePai < string, object > > >();
}

Я добавляю такие данные в этот словарь:

MyObject.AddParameters("object1", new List < KeyValuePair < string, object > > {
new KeyValuePair < String, object >("propertie1", "value"),
new KeyValuePair < String, object >("propertie2", "value"),
}
MyObject.AddParameters("object2", new List < KeyValuePair < string, object > > {
new KeyValuePair < String, object >("propertie1", "value"),
new KeyValuePair < String, object >("propertie2", "value"),
}

Поместите, когда я декодирую свой сериализованный объект в PHP, я получил:

{
"parameters": {
"object1": [
{
"Key": "propertie1",
"Value": "value"},
{
"Key": "propertie2",
"Value": "value"}
],
"object2": [
{
"Key": "propertie1",
"Value": "value"},
{
"Key": "propertie2",
"Value": "value"}
]
},
}

Как я могу получить правильный формат из сериализации JSON.Net?

0

Решение

Вам нужно будет добавить данные в C # в нужной форме.

То, как вы добавляете данные сейчас, действительно преобразуется в этот вывод.

Вам нужно что-то вроде этого в C #:

MyObject.AddParameters("object1", new List < KeyValuePair < string, object > > {
new KeyValuePair < String, object >("propertie1", "value"),
new KeyValuePair < String, object >("propertie2", "value"),
}

MyObject.AddParameters("object2", new List < KeyValuePair < string, object > > {
new KeyValuePair < String, object >("propertie1", "value"),
new KeyValuePair < String, object >("propertie2", "value"),
}
1

Другие решения

Редактировать:

Лучший способ — позволить JsonConvert.Serialize выполнять свою работу, но он должен установить List<KeyValuePair> в качестве параметра я передаю объект.

Код сейчас

public class MyObject
{
public Dictionnary<string, object> parameters = new Dictionnary<string,object>();
}

И добавление данных в такие параметры, как это

MyObject.AddParameters("object1", new {
propertie1 ="value",
propertie2 = "value",
});
MyObject.AddParameters("object2", new {
propertie1 ="value",
propertie2 = "value",
});

Теперь сериализованный словарь в формате, ожидаемом.

Оригинальный ответ:

Получил с 21021655 вопрос.

Нужно написать свой конвертер, как сказано в ответе

class MyConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
List<KeyValuePair<string, object>> list = value as List<KeyValuePair<string, object>>;
writer.WriteStartArray();
foreach (var item in list)
{
writer.WriteStartObject();
writer.WritePropertyName(item.Key);
writer.WriteValue(item.Value);
writer.WriteEndObject();
}
writer.WriteEndArray();
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
// TODO...
}

public override bool CanConvert(Type objectType)
{
return objectType == typeof(List<KeyValuePair<string, object>>);
}
}

И вернуть этот результат [{"one":1},{"two":2},{"three":3}]

0

По вопросам рекламы [email protected]