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 属性后,并未生效,检查原因是引用的命名空间导致,换成制定的命名空间后问题解决
近期评论