2016-12-08 7 views
0

私はJsonの文字列を動的にデシリアライズしていますが、デシリアライズ時に適切なタイプに変換する必要がありますが、動的なので必ず何が得られるかはわかりません。例えば、私はこのようになりますJSONている可能性があります:Jsonを適切なタイプにデシリアライズする

string serializedJsonString = { 
           "stringValue": "someString", 
           "dateTimeObject": "2016-12-08" 
           }; 

私はこのJSONはそのキーと値のペアにデシリアライズされるが、その値はStringとして上記の例では、彼らの適切なオブジェクト型として格納したいとし、 DateTime

私は次のようないくつかの試してみた:

IDictionary<string, object> blah = new JavaScriptSerializer().Deserialize<IDictionary<string, object>>(serializedJsonString); 

そして:

dynamic blah = Json.Decode(serializedJsonString); 

をしかし、それは常に単なる文字列に "dateTimeObject" を変換します。私はJsonがこの変換を行うことができますdeserializingと言われてきましたが、私はどのように把握することはできません。私は間違って何をしていますか?

答えて

0

またmy previous answersのいずれかをお読みください。 JSONに関する辞書のキー値のペアを処理する方法について説明します。

JSONのDateTime部分:DateTimesは難しいです。

この問題は、JSON仕様自体に起因しています.JSONの日付のリテラル構文はありません。仕様にはオブジェクト、配列、文​​字列、整数、浮動小数点数が含まれていますが、日付がどのように見えるかについての標準は定義していません。

JSONの日付が標準ではないため、他のシステムと相互運用する際に可能な異なる形式の数は無限です。

タイプが(非)シリアライズされる方法をオーバーライドするには、JsonConverterを使用する必要があります。

public class MyDateTimeConvertor : DateTimeConverterBase 
{ 
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
    { 
     return DateTime.Parse(reader.Value.ToString()); 
    } 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     writer.WriteValue(((DateTime)value).ToString("dd/MM/yyyy")); 
    } 
} 
関連する問題