[英]JToken: Get raw/original JSON value
有沒有辦法從JToken
獲取原始/原始 JSON 值?
問題:
var data = JObject.Parse(@"{
""SimpleDate"":""2012-05-18T00:00:00Z"",
""PatternDate"":""2012-11-07T00:00:00Z""
}");
var value = data["SimpleDate"].Value<string>();
該value
現在是05/18/2012 00:00:00
但我需要原始字符串2012-05-18T00:00:00Z
。
有沒有辦法獲得這個原始值? 此外,我無法更改JObject
的創建方式(例如更改設置),因為它作為參數傳遞到我的類中...
(參考:原始 NJsonSchema 問題)
您無法獲得原始字符串,日期字符串被識別並轉換為JsonReader
本身內部的DateTime
結構。 如果您這樣做,您可以看到這一點:
Console.WriteLine(((JValue)data["SimpleDate"]).Value.GetType()); // Prints System.DateTime
但是,您可以通過執行以下操作以ISO 8601格式提取日期:
var value = JsonConvert.SerializeObject(data["SimpleDate"]);
// value is "2012-05-18T00:00:00Z"
這將始終以JValue
JSON 的字符串格式輸出JValue
。 由於您的原始日期采用這種格式,因此這可能會滿足您的需求。
(老實說,我很驚訝JValue.ToString()
以非 ISO 格式輸出日期,因為JObject.ToString()
確實以 ISO 格式輸出包含日期。)
如果您能夠在讀取JObject
更改設置,則可以使用JsonSerializerSettings.DateParseHandling = DateParseHandling.None
禁用DateTime
識別:
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
JObject.Parse()
沒有采用JsonSerializerSettings
,因此請使用DeserializeObject
。 此設置最終會傳播到JsonReader.DateParseHandling
。
相關 Newtonsoft 文檔:
我在Json.NET Disable the deserialization on DateTime 中找到了一個解決方案:
JsonReader reader = new JsonTextReader(new StringReader(j1.ToString()));
reader.DateParseHandling = DateParseHandling.None;
JObject o = JObject.Load(reader);
另一種方法 - 行得通 - 正則表達式
SimpleDate(?:.*):(?:.*?)\"([0-9|-]{1,}T[0-9|:]+Z)
它是一種提取您要查找的數據的正則表達式模式 - 您只需要字符串,所以這里是 . 它不是 JSON 解析方法 - 但它確實提取了字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.