2016-07-26 156 views
2

我需要幫助瞭解如何使用的JsonConverter.ReadJson方法將值轉換任意數量的類型(字符串,布爾,日期,整型時,使用JsonConverter.ReadJson方法來進行類型轉換,數組,對象)到特定的自定義類型。Newtonsoft JSON - 如何反序列化JSON

例如,我有以下;

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
    { 
     //where reader.Value could be a string, boolean, Date, int, array, object 
     //and in this example the value of reader.Value is a string 
     return new MyCustomType(reader.Value); 
    } 

但是這給出了錯誤;

Compilation error (line 115, col 36): Argument 1: cannot convert from 'object' to 'string' 

我用C#有一點綠色,只需要幫助做這項工作。

回答

5

終於搞定了;

public override object ReadJson(
    JsonReader reader, 
    Type objectType, 
    object existingValue, 
    JsonSerializer serializer) 
{ 
    MyCustomType myCustomType = new MyCustomType();//for null values   

    if (reader.TokenType != JsonToken.Null) 
    {   
     if (reader.TokenType == JsonToken.StartArray) 
     { 
      JToken token = JToken.Load(reader); 
      List<string> items = token.ToObject<List<string>>(); 
      myCustomType = new MyCustomType(items); 
     } 
     else 
     { 
      JValue jValue = new JValue(reader.Value); 
      switch (reader.TokenType) 
      { 
       case JsonToken.String: 
        myCustomType = new MyCustomType((string)jValue); 
        break; 
       case JsonToken.Date: 
        myCustomType = new MyCustomType((DateTime)jValue); 
        break; 
       case JsonToken.Boolean: 
        myCustomType = new MyCustomType((bool)jValue); 
        break; 
       case JsonToken.Integer: 
        int i = (int)jValue; 
        myCustomType = new MyCustomType(i); 
        break; 
       default: 
        Console.WriteLine("Default case"); 
        Console.WriteLine(reader.TokenType.ToString()); 
        break; 
      } 
     } 
    }  
    return myCustomType; 
} 

不知道這是否是最好的解決方案,但它的工作。

0

自對象的基礎,只是想和你的字符串,你爲什麼不這樣稱呼它:

return new MyCustomType(reader.Value.ToString()); 
+0

感謝MoustafaS 只處理一種類型(串),我需要能夠處理所有類型:字符串,布爾日期,INT,數組,對象 – ClaraU

+0

你提到,你要轉換爲字符串,怎麼會你處理數組?所有其他對象實現.ToString()@claracruz – MoustafaS

+0

一個字符串只是一個例子,但這是我的問題我如何處理所有數據類型 – ClaraU

3

您可以測試值類型之前轉換。 你可以這樣做:

if (reader.TokenType != JsonToken.String) 
{ 
    throw new JsonSerializationException(); 
} 

var value = serializer.Deserialize<string>(reader);