如果你有這樣的十進制值,它通常是最好等到最後可能moment--也就是在即將向最終用戶顯示值之前 - 在將其格式化爲字符串之前。等待爲您提供了使用價值的最大靈活性;您可以使用它進行計算,或者決定對不同的顯示進行不同的格式化。所以我的建議是將您的JsonReport
類中的a
屬性更改爲double
或decimal
(取決於您的需要),然後在準備輸出時更改值的格式。所有這一切說,如果你真的想在反序列化過程中將十進制值格式化爲字符串,你可以使用自定義的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
對不起,我想保持原始格式爲字符串,我已經改寫了這個問題。 –
檢查編輯答案 – Nilesh