JsonIgnore,JsonConverter不生效原因

解决办法:引用 using Newtonsoft.Json

在调查ajax 前台和后台交互其中id值不一样的情况,

后台给出的值是 16508640061130069 前台接收到的值是16508640061130068,

原来是后台的id类型是long,前台js收到后,会有精度上的损失导致,怎么解决呢?需要定义StringJsonConverter转换类,将long转换成string丢给前台,这样就不会有精度上的丢失了,代码如下:

    public class StringJsonConverter : JsonConverter
    {
        public StringJsonConverter() { }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            return reader.Value.ParseToLong();
        }

        public override bool CanConvert(Type objectType)
        {
            return true;
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            if (value == null)
            {
                writer.WriteNull();
                return;
            }
            string sValue = value.ToString();
            writer.WriteValue(sValue);
        }
    }

需要在转换的字段上加上属性

 [JsonConverter(typeof(StringJsonConverter))]
        public long? Id { get; set; }

这样在前台json转换的时候,就能将id的数据类型,转换成string类型发送了

但是通过这样设置后,并没有生效,JsonIgnore也没有生效,原因是引用的命名空间,需要引用 using Newtonsoft.Json;

总结:此问题背景:在做treetable绑定的时候,发现数据并没有按照层级关系绑定,在分析js后,发现数据没有找到正确的上级,调查发现是后台给的id数据与前台收到的id数据并不一样,前台的数据有精度上的损失,导致上下级匹配失败,按照网上的做法,将id类型从long转换成字符串后给到前台可解决问题,于是又碰到了第二个问题,在定义和使用 StringJsonConverter 属性后,并未生效,检查原因是引用的命名空间导致,换成制定的命名空间后问题解决

You may also like...

发表回复