在我的ASP.Net MVC应用程序中,我有一个Model层,它在业务对象上使用本地化验证注释。
代码如下所示:
[XmlRoot("Item")]
public class ItemBo : BusinessObjectBase
{
[Required(ErrorMessageResourceName = "RequiredField", ErrorMessageResourceType = typeof(StringResource))]
[HelpPrompt("ItemNumber")]
public long ItemNumber { get; set; }
这很有效。
当我想将对象序列化为xml时,我得到错误:
“找不到指定的'ErrorMessageResourceType'属性”(虽然它在其他错误之下丢失了,但这是我正在努力解决的问题。
因此问题是使用DataAnnotations属性。相关的资源文件在另一个程序集中,并标记为“公共”,正如我所说,一切正常,直到我进行序列化。
我在我的nunit测试和目标类中引用了相关的DataAnnotations类等。
顺便说一句,HelpPrompt是我在别处定义的另一个数据注释,并没有引起问题。
此外,如果我将Required属性更改为标准格式,如下所示,序列化工作正常。
[Required(ErrorMessage="Error")]
任何人都可以帮助我吗?
答案 0 :(得分:1)
问题在于发现错误。序列化对象时,我必须在尝试实例化序列化器时捕获异常
serial = new XmlSerializer(doc.GetType());
然后按照我的方式通过InnerExceptions层次结构来分析产生的InvalidOperationException,并获得准确的错误消息,告诉我出了什么问题:
资源类型'StringResource'没有名为'RequiredField'的公开可见的静态属性。
现在正常工作