使用JavaScriptSerializer进行反序列化是缺少字段

时间:2013-07-25 21:53:54

标签: c# json deserialization

字段被忽略了。我成功找回了2个对象的列表,但没有填充任何字段。我究竟做错了什么? (不幸的是,我无法控制json格式。它完全符合这种结构。

using System.Web.Script.Serialization;

public void myMethod {
  string myContent = @"
  [
    {
        "my_object": {
            "city": "city 1", 
            "myAge": 15
        }
    },
    {
        "my_object": {
            "city": "city 2", 
            "myAge": 18
        }
    }
  ]";

  JavaScriptSerializer serializer = new JavaScriptSerializer();
  List<my_object> list = serializer.Deserialize<List<my_object>>(myContent);

}

public class json_content {
  public string city { get; set; }
  public int myAge { get; set; }
}

2 个答案:

答案 0 :(得分:2)

您的JSON中有一个属性json_content的对象列表,但是期望列表直接包含json_content个对象。

最有可能的解决方法是从JSON中删除中间对象(如果你控制它):

[
  {
     "city": "city 1", 
     "myAge": 15
  },...
];

如果您不控制JSON添加外部类:

class JsonOuterContent
{ 
   public JsonContent json_content;
}

List<JsonOuterContent> list = serializer
      .Deserialize<List<JsonOuterContent>>(myContent);

答案 1 :(得分:2)

此代码解决了您的问题:

public void myMethod()
{
    string myContent = @"
        [
            {
                ""json_content"": {
                    ""city"": ""city 1"", 
                    ""myAge"": 15
                }
            },
            {
                ""json_content"": {
                    ""city"": ""city 2"", 
                    ""myAge"": 18
                }
            }
        ]";

    JavaScriptSerializer serializer = new JavaScriptSerializer();
    List<wrapper> list = serializer.Deserialize<List<wrapper>>(myContent);
}

public class wrapper
{
    public json_content json_content { get; set; }
}

public class json_content
{
    public string city { get; set; }
    public int myAge { get; set; }
}