JavaScriptSerializer将对象"collection"反序列化为对象失败的属性

bil*_*ill 6 javascript serialization asp.net-ajax 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";
Run Code Online (Sandbox Code Playgroud)

我正在使用JSON.stringify(object)通过ajax请求传递它.当我尝试使用JavaScriptSerializer.Deserialize作为字典反序列化时,我得到以下错误:

没有为'System.String'类型定义无参数构造函数.

这个完全相同的过程适用于具有非"集合"属性的常规对象..感谢您的帮助!

jve*_*ema 9

这是因为反序列化器不知道如何处理子对象.你在JS中拥有的是:

var x = {
  'property1' : 'string',
  'property2' : 'string',
  'property3' : { p1: 'string', p2: 'string', p3: 'string' },
};
Run Code Online (Sandbox Code Playgroud)

它没有映射到C#中有效的内容:

HashTable h = new HashTable();
h.Add("property1", "string");
h.Add("property2", "string");
h.Add("property3", ???);
Run Code Online (Sandbox Code Playgroud)

??? 是因为这里没有定义类型,所以反序列化器如何知道JS中的匿名对象代表什么?

编辑

没有办法做你想在这里完成的事情.您需要输入对象.例如,像这样定义你的类:

class Foo{
  string property1 { get; set; } 
  string property2 { get; set; }
  Bar property3 { get; set; } // "Bar" would describe your sub-object
}

class Bar{
  string p1 { get; set; }
  string p2 { get; set; }
  string p3 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

......或者那种效果.