找不到指定的“ErrorMessageResourceType”属性。在XmlSerialise上

时间:2010-06-10 16:49:39

标签: asp.net-mvc xml serialization annotations data-annotations

在我的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")]

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

答:啊哈,答案比我想象的要容易。简而言之,StringResource程序集中不存在“RequiredField”公共静态属性。

问题在于发现错误。序列化对象时,我必须在尝试实例化序列化器时捕获异常

serial = new XmlSerializer(doc.GetType());

然后按照我的方式通过InnerExceptions层次结构来分析产生的InvalidOperationException,并获得准确的错误消息,告诉我出了什么问题:

  

资源类型'StringResource'没有名为'RequiredField'的公开可见的静态属性。

现在正常工作