如何使用自定义路径序列化json数组?

时间:2013-12-10 12:27:51

标签: c# json.net

我有下一个json:

{
  "foo": "foo",
  "bars": {
             "bar": [
             {
               "a":"b",
               "c":"d"
             },
            {
               "a":"b",
               "c":"d"
             },
                   ]
           }
}

正如您所看到的,存在包含数组的属性。 如何将此json反序列化为下一个类签名

class SomeClass
{
     public string foo{ get;set;}
     public IEnumerable<bar> {get;set;}
}

而不是

class SomeClass
{
     public string foo{ get;set;}
     public Bars bars {get;set;}
}
class Bars
{
     public IEnumerable<bar> {get;set;}
}

2 个答案:

答案 0 :(得分:0)

如果您对json进行了一些修改,则此代码应该有效:

var myObj = new JavaScriptSerializer().Deserialize<SomeClass>(json);

你的json:

{
  "foo": "foo",
  "bars": /*{
             "bar": this should be removed*/
             [
                 {
                   "a":"b",
                   "c":"d"
                 },
                 {
                   "a":"b",
                   "c":"d"
                 } /*, and this comma*/
             ]
         /*} and this closing bracket too*/
    }

答案 1 :(得分:0)

您可以创建映射到班级的公共列表:

class SomeClass
{
  public string foo{ get;set;}
  private BarItems bars {get;set;}     

  public IEnumerable<Bar> Bars
  {
    get
    {
      return bars.bar ?? new IEnumerable<Bar>();
    }
    set
    {
      bars.bar = value;
    }
  }
}


class BarItems
{
     public IEnumerable<Bar> bar {get;set;}
}

使用它时,它最不会使对象更有用。