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

Json.NET: Parsing object array of unknown length

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

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

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

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

someObjects 需要被反序列化为 Object (class) 或 JObject (C# json) 或某种 Dictionary.

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

您可以对某些对象使用 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);
    }    
}

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

string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(对象名称);

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

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

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