在哪里可以找到适用于 C# 的简单但灵活的 JSON 解析器

本文关键字:JSON 简单 适用于 在哪里 | 更新日期: 2023-09-27 18:34:49

我需要在 C# 中将一些 JSON 解析为对象。我看过Newtonsoft和JavaScriptSerializer,但要么我不知道如何很好地使用它们,要么它们在处理格式方面做得很差,这些格式可能会改变,并且对于复杂的结构来说很尴尬。我想要一些可以做这样的事情:

JsonObject j = Deserialize(mystring);
String[] earthColors = j.maps["earth"].colors;

而不关心结构的其余部分。

在哪里可以找到适用于 C# 的简单但灵活的 JSON 解析器

我认为你应该重新考虑不使用 Json.Net

string mystring = 
    @"
    {
        ""maps"": {
            ""earth"": {
                ""colors"": [
                    ""blue"",
                    ""green""
                ]
            },
            ""moon"": {
                ""colors"": [
                    ""black"",
                    ""white""
                ]
            }
        }
    ";
dynamic j = JsonConvert.DeserializeObject(mystring);
foreach (var c in j.maps["earth"].colors)
{
    Console.WriteLine(c);
}

静态类方法

以下是将 JSON 转换为对象的通用方法(请务必包含 System.Web.Script.Serialization(:

    public static T JsonToObject<T>(string JsonData)
    {
        // Deserialize the JSON into the object
        JavaScriptSerializer jss = new JavaScriptSerializer();
        T rf = (T)jss.Deserialize(JsonData, typeof(T));
        return rf;
    }

要将对象转换回 JSON,请使用以下通用方法:

    public static string ObjectToJson<T>(T rf)
    {
        // Serialize the object as JSON
        StringBuilder sb = new StringBuilder();
        JavaScriptSerializer jss = new JavaScriptSerializer();
        jss.Serialize(rf, sb);
        return sb.ToString();
    }

要使用它,只需创建与 JSON 响应匹配的类,然后调用 JsonToObject 方法。

JsonObject j = JsonToObject(mystring);

动态方法

对于更动态的方法,您需要查看如下所示的内容:

JavaScriptSerializer jss = new JavaScriptSerializer();
var JsonObject = jss.Deserialize<dynamic>(mystring);

这将动态创建JsonObject,然后您可以使用Dictionary样式访问器,而不必预先创建类。 因此,对于给定的 JSON 响应

{ "maps": ["earth": {"colors": ["purple","chartreuse"] }] }

C 类将动态创建,可以访问为

JsonObject.maps["earth"].colors[0] == "purple";
JsonObject.maps["earth"].colors[1] == "chartreuse";