C# Json.NET中的JConstructor和JRaw
根据对StackOverflow的回答: Json.NET包含许多不属于Json规范的功能。特别是,它允许解析一些“正式”无效的JSON文件。这包括未引用的属性、注释、构造函数等 这些是可从C# Json.NET中的JConstructor和JRaw,c#,json,types,json.net,C#,Json,Types,Json.net,根据对StackOverflow的回答: Json.NET包含许多不属于Json规范的功能。特别是,它允许解析一些“正式”无效的JSON文件。这包括未引用的属性、注释、构造函数等 这些是可从JToken分配的所有类型: JArray JConstructor JContainer JObject JProperty JRaw JValue 请说明以下情况是否属实: “正式”有效json上的JToken.Parse(json)不可能在其子代中包含JConstructor或JRaw 如果json是
JToken
分配的所有类型:
JArray
JConstructor
JContainer
JObject
JProperty
JRaw
JValue
请说明以下情况是否属实:
JToken.Parse(json)
不可能在其子代中包含JConstructor
或JRaw
JArray
,JObject
,JProperty
,JValue
你的陈述是正确的
新日期(1234656000000)
。如中所述:
从技术上讲,根据规范,这是无效的,但是所有浏览器和一些JSON框架,包括JSON.NET,都支持它
因此,当解析严格符合或的JSON时,JConstructor
将不会出现
使用解析JSON时将永远不会出现。它主要用于促进从JToken
层次结构中编写预格式化的JSON文本。通过使用JRaw
,可以避免仅仅为了发出已经格式化的JSON而对其进行解析,例如:
var root = new JObject(new JProperty("response", new JRaw(jsonLiteral)));
var rootJson = root.ToString();
可以执行以下操作,而不是效率较低的操作:
var root = new JObject(new JProperty("response", JToken.Parse(jsonLiteral)));
还可以反序列化到JRaw
,以将JSON层次结构捕获为单个字符串文本,尽管我认为这样做没有多大用处。例如,给定类:
public class RootObject
{
public JRaw response { get; set; }
}
一个人可以做到:
var rootDeserialized = JsonConvert.DeserializeObject<RootObject>(rootJson);
var jsonLiteralDeserialized = (string)rootDeserialized.response;
var rootDeserialized=JsonConvert.DeserializeObject(rootJson);
var jsonLiteralDeserialized=(字符串)rootDeserialized.response;
然而,这并不一定比反序列化到JToken
更有效JArray
、JObject
、JProperty
和JValue
会出现