[英]Override Newtonsoft.Json serialization of single
我正在对服务器和客户端上的序列化对象进行哈希处理以比较更改。 在服务器上,我使用javascript JSON.stringify。 在客户端上,我使用JsonSerializer.JsonSerialize。 为了使哈希值匹配,呈现的json两侧必须相同。
字段之一是javascript中的数字和.net中的单个。 在javascript中,它序列化为"duration": 1
。 在.net中,它序列化为"duration": 1.0
。 当然,这会使散列无法匹配。
如何让.net进行序列化而没有尾随零?
您可以使用自定义JsonConverter
来控制float的格式。 您需要对其进行测试,以确保格式在您期望的值范围内匹配,但这应该非常接近。
class FormattedFloatConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(float));
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteRawValue(((float)value).ToString("0.########"));
}
public override bool CanRead
{
get { return false; }
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
JsonConvert.SerializeObject
有一个接受过载JsonConverter
,使得它非常简单的使用方法:
string json = JsonConvert.SerializeObject(yourObject, new FormattedFloatConverter());
小提琴: https : //dotnetfiddle.net/3t6RiR
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.