【问题标题】:'ErrorMessageResourceType' property specified was not found. on XmlSerialise未找到指定的“ErrorMessageResourceType”属性。在 XmlSerialise
【发布时间】:2010-06-10 16:49:39
【问题描述】:

在我的 ASP.Net MVC 应用程序中,我有一个模型层,它在业务对象上使用本地化验证注释。

代码如下:

[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")]

谁能帮帮我?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    现在可以正常使用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-04
      • 2020-04-19
      • 2021-03-11
      • 2017-04-28
      • 1970-01-01
      • 2020-09-01
      • 2020-04-05
      • 2021-03-11
      相关资源
      最近更新 更多