c# - 为 Xml 序列化错误提供元素名称

标签 c# xml asp.net-mvc asp.net-web-api xml-serialization

我正在尝试弄清楚如何提供自定义错误消息或至少为我的 Web API 的 XML post 指定元素名称。目前,我得到的模型状态错误是

There is an error in XML document (2, 4).

此错误的内部异常提供了更多信息:

The string 'false fds' is not a valid Boolean value.

我希望能够向用户返回更具体的内容,说明包含无效值的元素,而不是让他们搜索 XML 以确定该值存在的位置。

这是我发布的 XML:

<?xml version='1.0'?>
<checkin>
    <checkinType>1</checkinType>
    <server>server1</server>
    <notes>New Checkin</notes>
    <productCheckins>
        <ihsCheckin>
            <vendor>IBM</vendor>
            <make>HTTP Server</make>
            <model></model>
            <version>8.5.5.0</version>
            <installLocation>/opt/IBM</installLocation>
            <is64Bit>false fds</is64Bit>
        </ihsCheckin>
</productCheckins>
</checkin>

这是我要转换成的类:

[XmlRoot("checkin")]
public class Checkin
{
    [XmlElement("checkinTime")]
    public DateTime CheckinTime { get; set; }
    [XmlElement("checkType")]
    public int CheckinType { get; set; }
    [XmlElement("notes")]
    public string Notes { get; set; }
    [XmlElement("server")]
    public string Server { get; set; }
    [XmlArray("productCheckins")]
    [XmlArrayItem("wasCheckin", typeof(WASCheckin))]
    [XmlArrayItem("ihsCheckin", typeof(IHSCheckin))]
    public List<ProductCheckin> ProductCheckins { get; set; }
}

public class ProductCheckin
{
    [XmlElement("vendor")]
    public string Vendor { get; set; }
    [XmlElement("make")]
    public string Make { get; set; }
    [XmlElement("model")]
    public string Model { get; set; }
    [XmlElement("version")]
    public string Version { get; set; }
    [XmlElement("installLocation")]
    public string InstallLocation { get; set; }
    [XmlElement("is64Bit")]
    public bool Is64Bit { get; set; }
}

基本上,我只想说,错误与 is64Bit 元素有关,但除了手动解析 XML 之外,我还没有找到解决方法。

最佳答案

我有点同意:

<is64Bit>false fds</is64Bit>

不是以下的有效值:

[XmlElement("is64Bit")]
public bool Is64Bit { get; set; }

您可以将其视为字符串:

[XmlElement("is64Bit")]
public string Is64Bit { get; set; }

之后再单独处理。

关于c# - 为 Xml 序列化错误提供元素名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19006916/

相关文章:

c# - 如何使用 C# 从 DIV 中抓取图像

c# - 元素未添加到列表中

asp.net - 为什么 Web 架构应该是松耦合的?

c# - 根据公共(public)属性合并列表项

c# - 如何从角色中获取数据

xml - XML 中的错误混合字符编码

java - XSLT 使用 concat 或多个 value-of 元素来连接变量?

java - 我可以在 Android 上禁用主页按钮吗

C# MVC DropDownListFor 字符串列表

javascript - jqGrid:为什么我为网格编辑定义的事件没有触发?