2016-02-01 6 views
7

生/元のJSON値をJTokenから取得する方法はありますか?JToken:raw/originalの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を作成する方法を方法を変更することはできません(参考:The original NJsonSchema issue

答えて

7

あなたは、元の文字列を取得することはできません、日付文字列が認識され、内部のDateTime構造体に変換されます。あなたが行う場合は、これを見ることができます:あなたは、しかし、実行してISO 8601形式で日付を抽出することができ

Console.WriteLine(((JValue)data["SimpleDate"]).Value.GetType()); // Prints System.DateTime 

var value = JsonConvert.SerializeObject(data["SimpleDate"]); 
// value is "2012-05-18T00:00:00Z" 

これます常に出力JSON-適切な文字列形式でJValue。元の日付はこの形式になっているため、これはあなたのニーズを満たすかもしれません。

(正直なところ、私はJValue.ToString()JObject.ToString()は出力がISO形式の日付が含まれていないことを考えると、非ISO形式で日付を出力驚いている。)

あなたJObjectを読みながら設定を変更することができたなら、あなたは可能性JsonSerializerSettings.DateParseHandling = DateParseHandling.None使用:あなたはDeserializeObjectを使用する必要がありますので、JsonSerializerSettingsを取るJObject.Parse()への過負荷があり

 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 

ません。この設定は最終的にJsonReader.DateParseHandlingに伝播します。

+0

。これは、値がDateTimeに変換されたときにもはや一致しません。 –

+0

多分[XY](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)の問題がここにあります? Json.NETがあなたのバリデーターの日付をすでに認識し解析しているという事実を活用できますか?結局のところ、JSONの日付の基準はありません。http://www.newtonsoft.com/json/help/html/DatesInJSON.htmを参照してください。 – dbc

+0

唯一の選択肢は、JObjectを作成するときに日付解析を無効にすることだと思われます。元の問題:https://github.com/NJsonSchema/NJsonSchema/issues/22 –

-2

別のアプローチ - それが働くだろう - そうここにある、あなただけの文字列を望んでいた - 正規表現

SimpleDate(?:.*):(?:.*?)\"([0-9|-]{1,}T[0-9|:]+Z) 

は、あなたが探してデータを抽出する正規表現パターンです。 JSON構文解析のアプローチではありませんが、実際には文字列を抽出します。私はjオブジェクトを受け取り、正規表現パターンで、このような日付文字列を検証することができるJSONスキーマバリ、に取り組んでいます:悪い

here is a sample of how it works

+1

申し訳ありませんが、私はあなたの答えを理解していません... –

+0

それは答えです - 問題は、 "文字列"を微調整する方法ではなく、Jsonの解析 –