2013-01-16 51 views
2

這裏是類如何使用JsonConverter將字符串反序列化爲十進制屬性?

public class ModelingData : BaseEquatable<ModelingData> 
    { 
     [JsonConverter(typeof(DecimalToStringConvertor))] 
     public decimal? ActualValue { get; set; } 

     public string DisplayValue { get; set; } 

     public override bool Equals(ModelingData other) 
     { 
      if (ReferenceEquals(null, other)) return false; 
      if (ReferenceEquals(this, other)) return true; 
      return Equals(other.ActualValue, ActualValue); 
     } 
    } 

而且我創建的類

public class DecimalToStringConvertor : JsonConverter 
    { 
     public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
     { 
      string javaScriptTicks = !string.IsNullOrWhiteSpace(Convert.ToString(value)) ? value.ToString() : string.Empty; 
      writer.WriteValue(javaScriptTicks); 
     } 

     public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
     { 
      if (existingValue == null) 
      { 
       return 0M; 
      } 

      return Convert.ToDecimal(existingValue); 
     } 

     public override bool CanConvert(Type objectType) 
     { 
      return true; 
     } 
    } 

現在,當我試圖反序列化,它給了我總是ReadJson方法existingValue參數無效。對於WriteJson來說它工作正常。

如何使用JsonConverter將字符串反序列化爲十進制屬性?

+0

你解決了嗎?如果是的話,請回答你自己的問題。謝謝 –

回答

-1

您可以使用JavaScriptSerializer來完成您的任務。

System.Web.Script.Serialization.JavaScriptSerializer oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
string sJSON = oSerializer.Serialize(oList); 

還有很多json序列化庫的例子服務棧解決方案。

+3

我必須反序列化。 – Sharad

+0

JavaScriptSerializer也有Deserialize方法。 –

0

閱讀幫助主題http://james.newtonking.com/projects/json/help/index.html?topic=html/SerializationAttributes.htm指定「指示JsonSerializer在序列化成員或類時使用指定的JsonConverter」。所以對我來說,似乎JsonConverter屬性不用於反序列化,而只用於序列化對象。

如果你嘗試,而不是通過你的類的新實例作爲參數傳遞給JsonConvert.DeserializeObject功能,如:

ModelingData md = JsonConvert.DeserializeObject<ModelingData>(jsonData, new DecimalToStringConvertor()); 

我相信你應該有更多的成功。

相關問題