JToken.ToString()正在删除大括号

本文关键字:删除 ToString JToken | 更新日期: 2023-09-27 18:27:10

我有以下JToken:

{
    "ID": "9dbefe3f5424d972e040007f010038f2"
}

但是,每当我在JToken对象上运行ToString()以获得字符串形式的底层JSON时,它都会返回:

'"ID'": '"9dbefe3f5424d972e040007f010038f2'"

跳过引号是意料之中的事,但为什么要去掉大括号呢?它是有效的JSON。这似乎只在某些情况下发生,因为我能够成功地运行ToString(),并在其他(更复杂的)JTokens上保持大括号不变。

JToken.ToString()正在删除大括号

ToString()返回JToken内容的JSON表示。JToken是一个抽象类,所以返回什么JSON取决于它是什么类型的JToken(以及它包含什么)。

下面是一个简短的例子来说明这一点:

class Program
{
    static void Main(string[] args)
    {
        JObject jo = new JObject();
        jo.Add("ID", "9dbefe3f5424d972e040007f010038f2");
        // token is a JObject
        DumpToken(jo);
        // token is a JProperty (the first property of the JObject)
        DumpToken(jo.Properties().First());
        // token is a JValue (the value of the "ID" property in the JObject)
        DumpToken(jo["ID"]);  
    }
    private static void DumpToken(JToken token)
    {
        Console.WriteLine(token.GetType().Name);
        Console.WriteLine(token.ToString());
        Console.WriteLine();
    }
}

输出:

JObject
{
  "ID": "9dbefe3f5424d972e040007f010038f2"
}
JProperty
"ID": "9dbefe3f5424d972e040007f010038f2"
JValue
9dbefe3f5424d972e040007f010038f2

因此,我怀疑,当您从ToString()获得一个裸名称值对时,您的代码中有一个对JProperty的引用,而不是对JObject的引用。当您在JObjectJArray上调用ToString()时,您应该只期望得到完整(有效)的JSON。