如何将反序列化JSON对象转换为类

时间:2017-12-29 06:46:46

标签: c# json json.net

我有一个数组对象,我使用Newtonsoft JSON反序列化。

现在我需要将反序列化的对象转换为类属性。

我反序列化的对象是: -

[
  [
    {
      "filterName": "Is Active",
      "filterformattedValue": "True",
      "filterValue": true,
      "view": "Demo/UsersbyFunction"
    },    
    {
      "filterName": "Sbg",
      "filterformattedValue": "PMT",
      "filterValue": "PMT",
      "view": "Demo/UsersbyFunction"
    },
    {
      "filterName": "Sbg",
      "filterformattedValue": "SPS",
      "filterValue": "SPS",
      "view": "Demo/UsersbyFunction"
    }
  ],
  [    
    {
      "filterName": "Sbg",
      "filterformattedValue": "CORP",
      "filterValue": "CORP",
      "view": "Demo/UsersbyFunction"
    },
    {
      "filterName": "Sbg",
      "filterformattedValue": "PMT",
      "filterValue": "PMT",
      "view": "Demo/UsersbyFunction"
    },
    {
      "filterName": "Sbg",
      "filterformattedValue": "SPS",
      "filterValue": "SPS",
      "view": "Demo/UsersbyFunction"
    }
  ]
]

我的班级是: -

public class Filter
{
    public string filterName { get; set; }
    public string filterformattedValue { get; set; }
    public string filterValue { get; set; }
    public string view { get; set; }
}

现在我需要创建一个Filter类的Array对象。 有没有办法做到这一点?

提前致谢。

3 个答案:

答案 0 :(得分:2)

编辑新的json结构: 好的,那么你有一个二维对象:

string str = @"[  [    {      ""filterName"": ""Is Active"",      ""filterformattedValue"": ""True"",      ""filterValue"": true,      ""view"": ""Demo/UsersbyFunction""    },        {      ""filterName"": ""Sbg"",      ""filterformattedValue"": ""PMT"",      ""filterValue"": ""PMT"",      ""view"": ""Demo/UsersbyFunction""    },    {      ""filterName"": ""Sbg"",      ""filterformattedValue"": ""SPS"",      ""filterValue"": ""SPS"",      ""view"": ""Demo/UsersbyFunction""    }  ],  [        {      ""filterName"": ""Sbg"",      ""filterformattedValue"": ""CORP"",      ""filterValue"": ""CORP"",      ""view"": ""Demo/UsersbyFunction""    },    {     ""filterName"": ""Sbg"",      ""filterformattedValue"": ""PMT"",      ""filterValue"": ""PMT"",      ""view"": ""Demo/UsersbyFunction""    },    {      ""filterName"":""Sbg"",      ""filterformattedValue"": ""SPS"",      ""filterValue"": ""SPS"",      ""view"": ""Demo/UsersbyFunction""    }  ]]";
List<List<Filter>> filters = Newtonsoft.Json.JsonConvert.DeserializeObject<List<List<Filter>>>(str);

或者如果你更喜欢数组:

Filter[][] filters = Newtonsoft.Json.JsonConvert.DeserializeObject<Filter[][]>(str);

答案 1 :(得分:1)

您的JSON结构似乎有误。在https://jsonlint.com上验证相同内容删除最外面的花括号,然后尝试此

JsonConvert.DeserializeObject<IEnumerable<IEnumerable<Filter>>>(your_JSON_String)

答案 2 :(得分:0)

您可以尝试使用Cinchoo ETL - 一个用于解析/创建JSON文件的开源库。

using (var jr = new ChoJSONReader<Filter>("sample10.json")
    )
{
    foreach (var x in jr)
    {
        Console.WriteLine($"FilterName: {x.filterName}");
        Console.WriteLine($"FilterformattedValue: {x.filterformattedValue}");
        Console.WriteLine($"filterValue : {x.filterValue}");
        Console.WriteLine($"View: {x.view}");
    }
}

披露:我是这个图书馆的作者。