JSON序列化器自动添加$id问题:序列化User实体出现额外ID
为什么JSON序列化User实体时会自动出现额外的$id?
嘿,这个问题我太清楚啦!你看到的$id完全是因为你给User类加了[JsonObject(IsReference = true)]这个特性导致的。
这个特性是Json.NET(也就是咱们常用的Newtonsoft.Json序列化库)里的功能,当你把IsReference设为true时,序列化器会自动给每个被序列化的对象加上$id属性——它的核心作用是处理对象引用循环。举个例子,如果你的User对象里有个属性又引用了另一个User对象,甚至是自身,开启这个特性后,序列化器不会无限递归序列化,而是用$ref来指向已经生成过的$id,避免栈溢出或者重复序列化的问题。
如果你的场景里没有引用循环的需求,完全不想要这个$id的话,有两个简单的解决办法:
- 直接删掉
[JsonObject(IsReference = true)]这个特性,因为默认情况下IsReference就是false - 或者保留特性但修改参数,改成
[JsonObject(IsReference = false)]
内容的提问来源于stack exchange,提问作者Yoda
相关产品推荐
相关产品推荐

