我有以下JToken
:
{
"ID": "9dbefe3f5424d972e040007f010038f2"
}
但每当我在ToString()
对象上运行JToken
以获取字符串形式的基础JSON时,它将返回:
\"ID\": \"9dbefe3f5424d972e040007f010038f2\"
预计会撤消报价,但为什么要删除花括号?它是有效的JSON。这似乎只在某些情况下发生,因为我能够成功运行ToString()
并且在其他(更复杂的)JTokens
上保持花括号。
答案 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。