newtonjson.net JsonConverter 的使用自定义序列化某个类(一)

1 篇文章 0 订阅
1 篇文章 0 订阅

json.net可以说是.net平台最好的json序列化类库了。
在使用的过程中,我遇到了这个问题,比如说List< T >中,如果是T的子类U,依然会被反序列化成T的,所以我需要自己定义序列化方法,在json.net中,只要继承JsonConvert类就可以了,

public class convert : JsonConverter

我们需要重写3个方法

public class convert : JsonConverter
    {
        public override bool CanConvert(Type objectType)
        {
            return true;
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {

            return null;
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {

        }
    }

第一 Canconvert这个就是判断传入的类型能否转换,不多说了
第二个 ReadJson方法,它会传入一个JSonReader参数,有了它,我们就可以自已解析json了,它有

 if (reader.TokenType != JsonToken.StartObject) throw new Exception("json 格式有误");
// Token,英文符的意思,就是当前这个位置,它是什么,是json中的对象开始标志{,对象结束标志},还是数组开始[,或者是属性,这是它表达的意思。

 public enum JsonToken
  {
    None,
    StartObject,
    StartArray,
    StartConstructor,
    PropertyName,
    Comment,
    Raw,
    Integer,
    Float,
    String,
    Boolean,
    Null,
    Undefined,
    EndObject,
    EndArray,
    EndConstructor,
    Date,
    Bytes,
  }

token处的值

reader.Value

token处的值,但是{,或者},或者[ ,或者]的token的值是null,而JsonToken.PropertyName这种token是有值的,比如{“name”:”zt”}
如果读到第二个token,reader.Value 就是“name”,通过read方法向前读,每一次read都会向前进一步,读到下一个token,
read方法

 if (reader.TokenType != JsonToken.StartObject) 
            reader.Read();
            //读取下一个token

有了reader,我们就可以自己处理json数据了,但是注意,reader.Read()函数会返回bool值,我们必须要一直读取到它返回false为止,不然json.net会抛出异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值