Ric*_*ter 11 .net c# json json.net
有没有办法从原始/原始JSON值JToken?
问题:
var data = JObject.Parse(@"{
""SimpleDate"":""2012-05-18T00:00:00Z"",
""PatternDate"":""2012-11-07T00:00:00Z""
}");
var value = data["SimpleDate"].Value<string>();
Run Code Online (Sandbox Code Playgroud)
现在value是,05/18/2012 00:00:00但我需要原始字符串2012-05-18T00:00:00Z.
有没有办法获得这个原始价值?另外,我无法改变JObject创建方式(例如更改设置),因为它作为参数传递到我的类中...
(参考:最初的NJsonSchema问题)
dbc*_*dbc 13
您无法获取原始字符串,日期字符串被识别并转换为自身DateTime内部的结构JsonReader.如果你这样做,你可以看到这个:
Console.WriteLine(((JValue)data["SimpleDate"]).Value.GetType()); // Prints System.DateTime
Run Code Online (Sandbox Code Playgroud)
但是,您可以通过以下方式提取ISO 8601格式的日期:
var value = JsonConvert.SerializeObject(data["SimpleDate"]);
// value is "2012-05-18T00:00:00Z"
Run Code Online (Sandbox Code Playgroud)
这将始终以JValue适合JSON的字符串格式输出.由于您的原始日期采用此格式,因此可能符合您的需求.
(老实说,我很惊讶JValue.ToString()非ISO格式的输出日期,因为JObject.ToString()输出包含ISO格式的日期.)
如果您在阅读时可以更改设置,则JObject可以使用JsonSerializerSettings.DateParseHandling = DateParseHandling.None:
var settings = new JsonSerializerSettings { DateParseHandling = DateParseHandling.None };
var data = JsonConvert.DeserializeObject<JObject>(@"{
""SimpleDate"":""2012-05-18T00:00:00Z"",
""PatternDate"":""2012-11-07T00:00:00Z""
}", settings);
var value = data["SimpleDate"].Value<string>();
Debug.WriteLine(value); // Outputs 2012-05-18T00:00:00Z
Run Code Online (Sandbox Code Playgroud)
JObject.Parse()这需要一个没有超载JsonSerializerSettings,所以你需要使用DeserializeObject.此设置最终会传播到JsonReader.DateParseHandling.
小智 6
我在Json.NET Disable the deserialization on DateTime 中找到了一个解决方案:
JsonReader reader = new JsonTextReader(new StringReader(j1.ToString()));
reader.DateParseHandling = DateParseHandling.None;
JObject o = JObject.Load(reader);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4762 次 |
| 最近记录: |