Json.NET:解析未知长度的对象数组

时间:2016-07-26 09:38:59

标签: c# .net json json.net

我正在尝试解析看起来像这样的JSON数组:

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

有没有办法解析someObjects对象数组,当我开始处理JSON文件之前我不知道数组有多少个对象?

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

3 个答案:

答案 0 :(得分:1)

您可以将dynamic用于someObjects。代码可能如下所示:

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

答案 1 :(得分:0)

someObjects需要对Object(类)或JObject(C#json)或某种Dictionary进行去细化。

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

答案 2 :(得分:-1)

你可以使用JavaScriptSerializer()。Serialize 将对象转换为JSON字符串。

string json = new System.Web.Script.Serialization.JavaScriptSerializer()。Serialize(object name);

与反序列化类似,您可以使用反序列化函数

string json =“{\”chatName \“:\”Test \“,\”users \“:[\”User1 \“,\”User2 \“],\”someBooleanValue \“:true,\” someObjects \“:{\”object1 \“:\”someObjectValue1 \“,\”object2 \“:\”someObjectValue2 \“}}”;

Classname objectname = new System.Web.Script.Serialization.JavaScriptSerializer()。Deserialize(json);