JavaScriptSerializer 反序列化对象“集合”作为对象失败的属性
我有一个 js 对象,其结构如下:
object.property1 = "some string";
object.property2 = "some string";
object.property3.property1 = "some string";
object.property3.property2 = "some string";
object.property3.property2 = "some string";
我正在使用 JSON.stringify(object) 通过 ajax 请求传递它。当我尝试使用 JavaScriptSerializer.Deserialize 作为字典对其进行反序列化时,出现以下错误:
没有为“System.String”类型定义无参数构造函数。
这个完全相同的过程适用于具有非“集合”属性的常规对象..感谢您的帮助!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是因为反序列化器不知道如何处理子对象。 JS 中的内容是这样的:
它没有到 C# 中有效内容的映射:
???是因为这里没有定义类型,那么反序列化器如何知道JS中的匿名对象代表什么?
编辑
无法完成您在此处想要完成的任务。您需要输入对象。例如,像这样定义你的类:
...或类似的东西。
It's because the deserializer doesn't know how to handle the sub-object. What you have in JS is this:
which doesn't have a map to something valid in C#:
The ??? is because there's no type defined here, so how would the deserializer know what the anonymous object in your JS represents?
Edit
There is no way to do what you're trying to accomplish here. You'll need to make your object typed. For example, defining your class like this:
...or something to that effect.
作为一个更一般的答案,在我的例子中,我的对象看起来像:
我最初将数据字段作为字符串,而它应该是 Dictionary href="http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx" rel="nofollow">MSDN 用于使用字典语法的对象。
As a more general answer, in my case I had objects that looked like:
I originally had the data field as a string when it should've been a
Dictionary<string, string>
as specified on MSDN for objects that use dictionary syntax.