2013-12-24 67 views
1

當我嘗試將json數字字段轉換爲C#字符串字段中,我得到以下格式問題:格式問題,當反序列化數字字段作爲字符串中Json.net

JSON格式:

{"a":-7.0} 

相應的C#類:

public class JsonReport 
{ 
public string a {get;set;} 
} 

當我打電話的方法:

var obj=JsonConvert.DeserializeObject<JsonReport>(strContent); 

我預計obj.a會是「-7.0」,但它變成了「-7」,這不是我想要的,應該如何解決該問題?謝謝。

回答

0

如果你有這樣的十進制值,它通常是最好等到最後可能moment--也就是在即將向最終用戶顯示值之前 - 在將其格式化爲字符串之前。等待爲您提供了使用價值的最大靈活性;您可以使用它進行計算,或者決定對不同的顯示進行不同的格式化。所以我的建議是將您的JsonReport類中的a屬性更改爲doubledecimal(取決於您的需要),然後在準備輸出時更改值的格式。所有這一切說,如果你真的想在反序列化過程中將十進制值格式化爲字符串,你可以使用自定義的JsonConverter來完成此操作。下面是它可能是什麼樣子:

class FloatToStringConverter : JsonConverter 
{ 
    public override bool CanConvert(Type objectType) 
    { 
     return objectType == typeof(string); 
    } 

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
    { 
     JToken value = JToken.Load(reader); 
     if (value.Type == JTokenType.Float) 
     { 
      // Adjust the formatting to your requirements 
      return value.ToObject<double>().ToString("0.0#######;-0.0#######"); 
     } 
     return value.ToString(); 
    } 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     throw new NotImplementedException(); 
    } 
} 

要使用轉換器,裝點你想用一個JsonConverter屬性類似這樣的格式類的屬性:

public class JsonReport 
{ 
    [JsonConverter(typeof(FloatToStringConverter))] 
    public string a { get; set; } 
} 

然後你就可以反序列化正常:

var obj = JsonConvert.DeserializeObject<JsonReport>(strContent); 
Console.WriteLine(obj.a); 

輸出:

-7.0 
0

傳遞你的JSON對象作爲字符串

{"a":"-7.0"} 

更改您的C#類

public class JsonReport 
{ 
    public string a {get;set;} 
} 
+0

對不起,我想保持原始格式爲字符串,我已經改寫了這個問題。 –

+0

檢查編輯答案 – Nilesh