当我尝试将json
数字字段转换为C#字符串字段时,出现以下格式问题:
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 :(得分:0)
将您的json对象传递为字符串
{"a":"-7.0"}
更改您的C#类
public class JsonReport
{
public string a {get;set;}
}
答案 1 :(得分:0)
如果您有这样的十进制值,通常最好等到最后一刻 - 也就是说,就在您要将值显示给最终用户之前 - 在将其格式化为字符串之前。等待为您提供最大的灵活性来处理价值;您可以使用它进行计算,或者决定针对不同的显示进行不同的格式化。所以我的建议是将a
类中的JsonReport
属性更改为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