繁体   English   中英

覆盖Newtonsoft.Json的单人序列化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM