如何修复Controller使JavaScriptSerializer生成指定嵌套结构JSON
解决JavaScriptSerializer无法正确赋值子层级对象及列表的问题
看起来你遇到的核心问题是没有初始化子层级对象和列表类型的属性,直接调用Add或者赋值会导致空引用异常,或者序列化后缺失对应的JSON结构。下面是修改后的Controller代码,能完美生成你需要的目标JSON:
var root = new RootObject(); root.name = "Jan Kowalski"; root.email = "jan.kowalski@wp.pl"; root.dayOfCycle = "10"; // 初始化并赋值campaign子对象 root.campaign = new Campaign { campaignId = "jf7e3jn" }; // 初始化tags列表并添加元素 root.tags = new List<Tag>(); root.tags.Add(new Tag { tagId = "Xw" }); root.tags.Add(new Tag { tagId = "Nn" }); // 赋值scoring字段 root.scoring = 25; // 初始化customFieldValues列表及内部的value列表 root.customFieldValues = new List<CustomFieldValue>(); root.customFieldValues.Add(new CustomFieldValue { customFieldId = "n", value = new List<string> { "white" } // 初始化List并添加元素 }); root.ipAddress = "89.206.36.193"; var jsBody = new JavaScriptSerializer().Serialize(root);
关键修改点说明:
- 子对象初始化:
campaign是类类型属性,必须先实例化new Campaign()再赋值,否则序列化后不会出现该字段 - 列表属性初始化:
tags、customFieldValues都是List<T>类型,必须先通过new List<T>()初始化,才能调用Add方法添加元素,避免空引用异常 - 嵌套列表处理:
CustomFieldValue中的value也是List<string>,同样需要先初始化再添加元素,这样才能生成目标JSON里的嵌套数组结构 - 补全注释代码:把你之前注释掉的
tags、scoring、customFieldValues相关逻辑补全,并修正value的赋值方式
修改后的代码执行序列化后,生成的JSON会完全匹配你提供的目标结构。
内容的提问来源于stack exchange,提问作者Kevin himch
相关产品推荐
相关产品推荐

