2016-07-26 47 views
0

我試圖解析JSON陣列,看起來是這樣的:Json.NET:未知長度的解析對象數組

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

有沒有一種方法來分析物體的someObjects陣列,當我不在開始處理JSON文件之前,知道數組有多少個對象?

所有解析都是使用Json.NET完成的。

+2

someObjects看起來像一個有屬性的對象,而不是一個數組。 – shahkalpesh

回答

1

對於someObjects,您可以使用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),因爲我不知道每個單獨屬性的名稱(object1和object2名稱經常變化)。 – DZetko

+0

看看這個:http://stackoverflow.com/questions/2594527/how-do-i-iterate-over-the-properties-of-an-anonymous-object-in-c – BWA

0

someObjects需要被刪除到Object(class)或JObject(C#json)或某種Dictionary

你可以使用json.net的方法反序列化json: JsonConvert.DeserializeObject<T>

-1

你可以使用JavaScriptSerializer()序列化 的對象轉換爲JSON字符串。

串JSON =新System.Web.Script.Serialization.JavaScriptSerializer()序列化(對象名稱)。

類似反序列化,你可以使用反序列化功能

字符串JSON = 「{\」 chatName \ 「:\」 測試\ 「\ 」用戶\「:\ 」用戶1 \「,\」 用戶2 \ 「],\」someBooleanValue \「:true,\」someObjects \「:{\」object1 \「:\」someObjectValue1 \「,\」object2 \「:\」someObjectValue2 \「}}」;

類名對象名=新System.Web.Script.Serialization.JavaScriptSerializer()反序列化(JSON)。

+0

JavaScriptSerializer是非常糟糕的選擇。 – BWA