2016-07-26 4 views
0

Я пытаюсь разобрать массив JSON, который выглядит примерно так:Json.NET: Синтаксический объект массив неизвестной длины

{ 
    "chatName": "Test", 
    "users": [ 
    "User1", 
    "User2" 
    ], 
    "someBooleanValue": true, 
    "someObjects": { 
    "object1": "someObjectValue1", 
    "object2": "someObjectValue2", 
    ... 
    } 
} 

Есть ли способ, чтобы разобрать массив someObjects объектов, когда я надеваю» t знает, сколько объектов будет иметь массив, прежде чем я начну обрабатывать JSON-файл?

Весь синтаксический анализ выполняется с использованием Json.NET.

+2

someObjects выглядит как объект со свойствами, а не с массивом. – shahkalpesh

ответ

1

Вы можете использовать dynamic для некоторых объектов. Код может выглядеть следующим образом:

using System; 
using System.Collections.Generic; 
using Newtonsoft.Json; 

public class RootObject 
{ 
    public string chatName { get; set; } 
    public List<string> users { get; set; } 
    public bool someBooleanValue { get; set; } 
    public dynamic someObjects { get; set; } 
} 

public class Program 
{ 
    static public void Main() 
    { 
     string j = "{\"chatName\": \"Test\",\"users\": [\"User1\",\"User2\"],\"someBooleanValue\": true,\"someObjects\": {\"object1\": \"someObjectValue1\",\"object2\": \"someObjectValue2\"}}"; 

     RootObject ro = JsonConvert.DeserializeObject<RootObject>(j); 

     Console.WriteLine(ro.someObjects.object1); 
    }  
} 
+0

Есть ли способ выполнить итерацию свойств someObject и получить его значение (например, someObjectValue1), так как я не знаю названия каждого отдельного свойства (часто меняются имена объектов1 и object2). – DZetko

+0

Посмотрите на это: http://stackoverflow.com/questions/2594527/how-do-i-iterate-over-the-properties-of-an-anonymous-object-in-c – BWA

0

someObjects потребности быть deserailized либо к Object (класс) или (# C JSON) JObject или к какому-то Dictionary.

Вы можете Deserialize json с помощью метода json.net: JsonConvert.DeserializeObject<T>.

-1

вы можете использовать JavaScriptSerializer() Сериализация Преобразует объект в строку JSON..

string json = new System.Web.Script.Serialization.JavaScriptSerializer(). Serialize (имя объекта);

аналогично десериализации вы можете использовать функцию десериализации

строку JSON = "{\" chatName \ ": \" Test \ "\ "Пользователи \": [\ "User1 \", \" Пользователь2 \ "], \" someBooleanValue \ ": true, \" someObjects \ ": {\" object1 \ ": \" someObjectValue1 \ ", \" object2 \ ": \" someObjectValue2 \ "}}";

Имя_файла objectname = new System.Web.Script.Serialization.JavaScriptSerializer(). Deserialize (json);

+0

JavaScriptSerializer - очень плохой выбор. – BWA

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