2015-11-22 2 views
0

Как это сделать JSON в C# как указано ниже?Json parse sub-collection in 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

пожалуйста clearify вас вопрос. что вы пытаетесь, где вы потерпели неудачу? – nozzleman

+0

JSON - это язык, который имеет свой синтаксис, пожалуйста, покажите нам, какой объект вы хотите представлять с JSON, и как сказал сопелман, что вы пробовали до сих пор –

+0

Вы пытаетесь * «читать» * 'JSON', который у вас уже есть , или * "создать" * новый 'JSON' в данном формате? –

ответ

1

Чтобы прочитать JSON

Самый лучший способ, чтобы прочитать весь JSON является Deserialize его в родной C# объекта. Если вы уже не имеете классов с вашим, вы можете создать его в Visual Studio, как

  • Скопируйте ваш JSON текст
  • Создайте новый пустой файл класса в VS
  • Правка> Вставить> Вставить 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 aka 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

Сначала необходимо создать объект, а затем Serialize к JSON

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" 
     } 
    ] 
    } 
} 
+0

Здравствуйте, Аргья, пожалуйста, еще один вопрос, пожалуйста. http://stackoverflow.com/questions/34044127/json-pare-sub-collection – John

+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); 

является JSon данные

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