如果我只知道对象构造函数的参数,我可以将JSON字符串反序列化为对象吗?

时间:2009-09-03 13:44:41

标签: c# .net json reflection serialization

这就像this one的后续问题。

基本上我正在做的是将某些UI上的某些字段暴露给某些用户。

这些字段是基于给定对象构造函数的参数列表建立的。用户可以选择选择UI显示的对象,哦,我不知道,让我们说从下拉列表中选择一个对象。

一旦填写了字段并且用户提交,我就知道我需要创建的对象类型,我知道它的构造函数所采用的参数名称和参数类型。我在服务器上获得了一个JSON字符串(后面是C#代码)。

该对象可能具有比构造函数公开的更多属性(公共或私有)。

如果JSON字符串不包含所有属性的数据,我还可以使用仍然使用JavaScript或JSON反序列化来获取我的对象吗?

我不确定我是否可以通过属性属性或某种方式指定默认值...

感谢。

2 个答案:

答案 0 :(得分:2)

Json.NET支持通过参数化构造函数创建类型,前提是只有一个构造函数,参数名称与JSON对象上的属性名称匹配。

答案 1 :(得分:1)

在填充对象时,DataContract反序列化器不使用类型的构造函数。它实际上使用fields / setters / getters填充对象。此外,如果您没有为某些属性提供值,则它们将初始化为其默认值,除非您连接DataInrtileizing事件,如OnDeserializing,OnDeserialize等。例如,如果类型具有名为FirstName of type string的属性(例如显然)并且json没有为FirstName定义任何内容,当你反序列化时,你会得到null作为默认值,因为你没有提供这个字段。