【发布时间】:2011-09-09 22:30:17
【问题描述】:
关于 JSON 反序列化有很多问题,但其中很多似乎是针对 MVC 1 或 MVC 2。我似乎没有找到专门针对 MVC 3 的令人满意的答案。
我有一个具有不可变属性且没有默认构造函数的对象,我想在 ASP.NET MVC 3 应用程序中对其进行反序列化。这是一个简化的版本:
public class EmailAddress
{
public EmailAddress(string nameAndEmailAddress)
{
Name = parseNameFromNameAndAddress(nameAndEmailAddress);
Address = parseAddressFromNameAndAddress(nameAndEmailAddress);
}
public EmailAddress(string name, string address)
{
Guard.Against<FormatException>(!isNameValid(name), "Value is invalid for EmailAddress.Name: [{0}]", name);
Guard.Against<FormatException>(!isAddressValid(address), "Value is invalid for EmailAddress.Address: [{0}]", address);
Name = name;
Address = address;
}
public string Address { get; private set; }
public string Name { get; private set; }
// Other stuff
}
一个示例控制器操作可能是:
[HttpPost]
public ActionResult ShowSomething(EmailAddress emailAddress)
{
return View(emailAddress)
}
传入的 JSON 是:
{"Address":"joe@bloggs.com","Name":"Joe Bloggs"}
在 MVC3 中反序列化的最佳方法是什么?是否有某种方法可以实现可以处理此问题的自定义模型绑定器或反序列化器类?
不干扰对象本身的解决方案会更好(即单独的反序列化器类,而不是向属性添加属性等),尽管对任何好的建议持开放态度。
我在这里发现了一个类似的问题(没有答案):Can I deserialize to an immutable object using JavascriptSerializer?
【问题讨论】:
-
达夫曼,你混淆了你的概念。 MVC 3 自动反序列化
JsonValueProviderFactory中的 JSON。然后,此反序列化信息可用于绑定到您的模型。 Darin 建议的解决方案适用于所有情况,即使 EmailAddress 类嵌入到不同的类中。 -
@counsellorben - 没错,感谢您为我澄清!
标签: json asp.net-mvc-3 deserialization