我有以下 JToken :

{
    "ID": "9dbefe3f5424d972e040007f010038f2"
}

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

转义引号是预期的,但为什么要删除花括号?它是有效的 JSON。这似乎只在某些情况下发生,因为我能够成功运行 ToString() 并在其他(更复杂的) JTokens 上保持大括号完好无损。

最佳答案

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 。当您在 ToString()JObject 上调用 JArray 时,您应该只期望获得完整(有效)的 JSON。

关于c# - JToken.ToString() 删除大括号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26476966/

10-13 01:16