根据c#中的类型对不同类型的json列表进行分组

时间:2015-04-17 11:15:50

标签: c# json json.net

我有一个不同类型对象(Schemaless)的json列表。但是,每一行都包含结构的类型。我需要根据他们的类型对其进行分组。 我需要把这个Json分组。 输入低于

 var result =   [{ "firstName":"John", "lastName":"Doe", "Type":"Person" },
    { "fruit":"apple", "Type":"Diet" },
    { "length":100, "width":60, "height":30,, "Type":"Measure" },
    { "firstName":"Shivang", "lastName":"Mittal", "Type":"Person" }]

预期产出:

    var persons=   [{ "firstName":"John", "lastName":"Doe", "Type":"Person" }, 
                    { "firstName":"Shivang", "lastName":"Mittal", "Type":"Person" }];

    var Diets = [{ "fruit":"apple", "Type":"Diet" }];
    var Measures = [{ "length":100, "width":60, "height":30,, "Type":"" }];

如何根据c#中的类型对其进行分组?

2 个答案:

答案 0 :(得分:1)

更好的是你将改变你的json格式:

{
   "Customer": [{"firstName":"John", "lastName":"Doe", "Type":"Person" }],
   "Fruit": [{"fruit":"apple", "Type":"Diet" }],
   "Length": [{"length":100, "width":60, "height":30, "Type":"Measure" }]
}

然后很容易

public class JsonType()
{
    public CustomerType Customer {get; set;}
    public FruitType Fruit {get; set;}
    public LengthType Length {get; set;}
}

public class CustomerType()
{
    public string firstName {get; set;}
    public string lastName {get; set;}
    public string Type {get; set;}
}

public class FruitType()
{
    public string fruit {get; set;}
    public string Type {get; set;}
}

等...

var result = JsonConvert.DeserializeObject<JsonType>(yourJson);

答案 1 :(得分:1)

不使用强类型对象/更改架构:

  var jarray = JArray.Parse(@"[{ ""firstName"":""John"", ""lastName"":""Doe"", ""Type"":""Person"" },
{ ""fruit"":""apple"", ""Type"":""Diet"" },
{ ""length"":100, ""width"":60, ""height"":30, ""Type"":""Measure"" },
{ ""firstName"":""Shivang"", ""lastName"":""Mittal"", ""Type"":""Person"" }]");

  var query = jarray
    .GroupBy(g => g["Type"])
    .Select(g => string.Format("var {0}={1};{2}", g.Key, new JArray(g.ToList()), Environment.NewLine));
  string result = string.Join(string.Empty, query);