JToken.ToString()删除花括号

时间:2014-10-21 00:13:13

标签: c# asp.net json json.net

我有以下JToken

{
    "ID": "9dbefe3f5424d972e040007f010038f2"
}

但每当我在ToString()对象上运行JToken以获取字符串形式的基础JSON时,它将返回:

\"ID\": \"9dbefe3f5424d972e040007f010038f2\"

预计会撤消报价,但为什么要删除花括号?它是有效的JSON。这似乎只在某些情况下发生,因为我能够成功运行ToString()并且在其他(更复杂的)JTokens上保持花括号。

1 个答案:

答案 0 :(得分:9)

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。