.net Json的几个坑

当反序列化的对象没有无参构造函数时,就会出现乱七八糟的现象
据我试验的结果,没有无参数构造函数时,
第一步,应该是先找json字符串中有没有与参数名相同的数值,有的话反序列化构建对象时,填入对应的参数,一旦值做为参数填入,后续反序列化流程不会再使用此值,构造完后,剩下的其他值,看对象有没有相应的名称属性,或字段,有则填入值。 …太复杂了,使用起来非常不方便,非常容易出错。 所以 所有将要使用到 Json反序列化的对象最好都带有无参数构造函数。
下面是验证我结论的试验
1.

public class Pos{
			public int x;
			public int y;
			public Pos(int x){
				
			}
		}

在这里插入图片描述
由于 构造函数中有x ,但是啥也没做, 构造完后, 还剩下y的值没有用,发现有y字段 则填入其值,所以得到结果x=0,y=11;
2.

public class Pos{
			public int x;
			public int y;
			public Pos(int x){
				this.y = x;
			}
		}

在这里插入图片描述
这次我在构造函数中让 x 的值给y, 后面由于json 中 y 的值还未使用 填入字段y,y的值被覆盖,所以得到结果x=0,y=11
3.

public class Pos{
			public int x;
			public int y;
			public Pos(int x, int y){
				this.x = x + 1;
				this.y = y + 1;
			}
		}

在这里插入图片描述
这次构造函数中两个值都用上了, 并在构造函数中得到为其值+1 所以得到结果 x=11 y=12,

使用无参数构造函数后,在构造对象时,将不会用上任何 json字符串中的值,所以反序列化的对象都可被填入相应的数据。 而不会是json 数据得到破坏。

第二个坑:
在untiy 客户端中,打包成IOS 程序后, 反序列Json的对象如果没有无参数构造函数将会报错,而且还需要在代码中定义一个静态的对象,默认值使用无参数构造函数创建。否则将会运行报错。

第三个坑:
要被序列化成Json对象的数据,其属性,字段值最好不要使用多态,否则反序列化时,将无法得到多态属性,字段的具体对象 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值