2016-09-05 1 views
0

Как разбирать json, у которых объект Asset неизвестен?Parse json, у которого есть неопределенное количество данных

Как

{ 
    "ClassName": "Excel", 
    "Teacher": "Esther", 
    "Student": 50, 
    "Aircond": 0, 
    "Assets": { 
     "Chair": 50, 
     "Table": 50, 
     "Fan": 2, 
     and might be more here and is unknown to me 
    } 
} 
+0

Здесь решение [введите ссылку здесь] (http://stackoverflow.com/a/2246724/3301006) – Dmitriy

ответ

2

Вы можете использовать dynamic в качестве Assets типа:

public class RootObject 
{ 
    public string ClassName { get; set; } 
    public string Teacher { get; set; } 
    public int Student { get; set; } 
    public int Aircond { get; set; } 
    public dynamic Assets { get; set; } 
} 

А потом

RootObject ro = JsonConvert.DeserializeObject<RootObject>(json); 
5

Если вы точно знаете, что Assets только связка ключей с различными значениями, то вы можете использовать IDictionary<string, object>, чтобы хранить Assets:

public class MyClass 
{ 
    public string ClassName { get; set; } 
    public string Teacher { get; set; } 
    public int Student { get; set; } 
    public int Aircond { get; set; } 
    public IDictionary<string, object> Assets { get; set; } 
} 

var myClass = JsonConvert.DeserializeObject<MyClass>(json); 
0

Если вы просто хотите, чтобы разобрать JSON без создания пользовательского объекта C#, вы можете использовать JObject.Parse.

string json = "{\n\t\"ClassName\": \"Excel\",\n\t\"Teacher\": \"Esther\",\n\t\"Student\": 50,\n\t\"Aircond\": 0,\n\t\"Assets\": {\n\t\t\"Chair\": 50,\n\t\t\"Table\": 50,\n\t\t\"Fan\": 2,\n\t\t\"More\": \"randomText\"\n\t}\n}"; 
var jObject = JObject.Parse(json); 
Console.WriteLine(jObject["Assets"]["More"]); 

Вам потребуется Newtonsoft.Json, которые можно установить из NuGet.

Смежные вопросы