C#JSON.Net使用PHP中的解码序列化Dictonnary问题

时间:2016-01-28 10:37:33

标签: c# php json json.net

我正在寻找一种方法来获得这个

{
  "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序列化中获取正确的格式?

2 个答案:

答案 0 :(得分:1)

您需要以您想要的格式在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 :(得分:0)

编辑:

更好的方法是让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",
});

现在序列化的Dictionnary是预期的格式。

原始答案:

用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}]