Json解析c#中的子集合

时间:2015-11-22 14:04:51

标签: c# json

如何在JSON C#中执行以下数据?

{
    "Aliases": [ "teddy", "freddy", "eddy", "Betty" ], 
    "Name":"reacher gilt", 
    "Address":"100 East Way", 
    "Age":74, 
    "Bars": { 
        "items": [ 
            {
                "Sub_Property1":"beep", 
                "Sub_Property2":"boop" 
            },
            {
                "Sub_Property1":"meep",
                "Sub_Property2":"moop"
            },
            {
                "Sub_Property1":"feep",
                "Sub_Property2":"foop"
            }
        ]
    }
}

其实我的问题在子集合中。我看到有人做了些什么 像这样

person.Bars.Add("items",
        new List<BarClass>(new[]{ 
        new BarClass("beep","boop"),
        new BarClass("meep","moop"),
        new BarClass("feep","foop"),
    }));

所以,我必须添加new BarClass("beep","boop"),但我需要做点什么 像这样

String [] no1 = {1,2,3}
String [] no2 = {4,5,6}
person.Bars.Add("items",
    new List<BarClass>(new[]{                 
    for ()
        {
           new BarClass(no1[i],no2[i])
        }      
}));

我该怎么做?谢谢,请帮助..

3 个答案:

答案 0 :(得分:1)

你应该创建一些类

public class Person
{
 public string Name {get;set;}    
 public string Address{get;set;}
 public int Age {get;set;}
 public Header {get;set;}
}    

public class Header
{
 public Detail[] Details {get;set;}
}

public class Detail
{
 public string Sub1 {get;set;}
 public string Sub2 {get;set;}
}

从Person类创建实例并初始化为

之后的实例
JavaScriptSerializer serializer =new JavaScriptSerializer();
var result=serializer.Serialize(instanceOfPerson);

&#34;导致&#34;是json数据

答案 1 :(得分:1)

假设您想要创建JSON字符串,则需要创建这些类并使用类似Newtonsoft JSON.net的内容:

public class Item
{
    public string Sub_Property1 { get; set; }
    public string Sub_Property2 { get; set; }
}

public class Bars
{
    public List<Item> items { get; set; }
}

public class Person
{
    public List<string> Aliases { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public int Age { get; set; }
    public Bars Bars { get; set; }
}

请阅读此处的文档:http://www.newtonsoft.com/json/help/html/Introduction.htm

答案 2 :(得分:1)

阅读JSON

阅读整个JSON的最佳方式是Deserialize它与原生C#对象。如果您还没有自己的类,则可以在Visual Studio中将其创建为

  
      
  • 复制您的JSON文字
  •   
  • 在VS
  • 中创建一个新的空类文件   
  • 编辑&gt;选择性粘贴&gt;将JSON粘贴为类
  •   

以下是课程

public class Person
{
    public string[] Aliases { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public int Age { get; set; }
    public Bars Bars { get; set; }
}

public class Bars
{
    public Item[] items { get; set; }
}

public class Item
{
    public string Sub_Property1 { get; set; }
    public string Sub_Property2 { get; set; }
}

现在您可以使用一些.NET JSON库进行反序列化。 JSON.Net又名Newtonsoft JSON是一个很棒的library。你也可以从NuGet得到它。

然后从C#

获取JSON对象非常容易
//using Newtonsoft.Json;
var jsonString = File.ReadAllText(@"C:\YourDirectory\person.json");
var person = JsonConvert.DeserializeObject<Person>(jsonString);

如果您只想阅读子集,可以使用Linq-to-JSON直接阅读items,就像这样

//using Newtonsoft.Json.Linq;
var jObject = JObject.Parse(jsonString);
List<Item> details = jObject["Bars"]["items"].ToObject<List<Item>>();

创建JSON

首先需要创建对象,然后SerializeJSON

string[] subProperties1 = new string[] { "1", "2", "3" };
string[] subProperties2 = new string[] { "4", "5", "6" };

Person person = new Person { Name = "Johny", Age = 7, Address = "Earth", Aliases = new string[] { "Sony", "Monty" } };
person.Bars = new Bars { 
    items = subProperties1.Zip(subProperties2, 
                                (prop1, prop2) => new Item { Sub_Property1 = prop1, Sub_Property2 = prop2 })
                            .ToArray() };
var json = JsonConvert.SerializeObject(person);

要从现有的items数组中创建string,我使用了IEnumerable.Zip中的Linq函数。您可以阅读here

这是创建的JSON数据

{
  "Aliases": [ "Sony", "Monty" ],
  "Name": "Johny",
  "Address": "Earth",
  "Age": 7,
  "Bars": {
    "items": [
      {
        "Sub_Property1": "1",
        "Sub_Property2": "4"
      },
      {
        "Sub_Property1": "2",
        "Sub_Property2": "5"
      },
      {
        "Sub_Property1": "3",
        "Sub_Property2": "6"
      }
    ]
  }
}