XML 反序列化为 xml 属性返回空值,但返回正确的 Xml 文本

XML Deserialization is returning null for an xml attribute but is returning the correct Xml text

下面我有以下对象:

[XmlRoot("ExampleObject")]
public class ExampleObject
{
    [XmlElement("element1")]
    public long element1{ get; set; }

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

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

    [XmlElement("element4")]
    public ExampleObject2 element4{ get; set; }
}

[Serializable()]
public class ExampleObject2
{
    [XmlText]
    public string Value { get; set; }

    [XmlAttribute]
    public string Id { get; set; }

    [XmlAttribute]
    public string Ref { get; set; }   
}

和以下 XML:

<c:ExampleObject>
   <c:element1>
        ...
   </c:element1>
   <c:element2>
          ...
   </c:element2>
   <c:element3>
          ...
   </c:element3>
   <c:element4 z:Ref="953" i:nil="true"/> <!--- or this <c:Status z:Id="953">...</c:element4> -->
</ExampleObject>

我能够完美地得到我的对象,除了 element4ExampleObject2 里面我的 IdRef 是空的,而 Value 有里面的正确值。

我想要它,这样 ExampleObject2 总是有一个 Value,它要么是 null,要么是它应该具有的值。我希望 IdRef 成为 element4 内属性的值,具体取决于 element4 是否具有该属性。

我想知道我是否遗漏了什么?

我也曾尝试为 XML 元素标签添加特定名称,例如 [XmlAttribute("Id")],但这似乎没有任何作用。我也尝试过包含这样的命名空间 [XmlAttribute("z:Id")] 但这会导致错误。

我也试过将 IsNullable 放在 element4 XMLElement 标签中,但对于具有 nil="true" 的 XML 元素,但它使整个 ExampleObject2 null 这不是我要找的。

我已经看过下面的问题并且遇到了同样的问题。

how to deserialize an xml node with a value and an attribute using asp.net serialization

谢谢

我最终用 Nil 属性 修复了它,就像@GeorgeBirbilis 所说的那样,并将它与@dbc 的解决方案一起使用,以手动命名 z: 和 c: 来自的名称空间。我只做一个或另一个,而不是两者结合。谢谢大家的帮助。

[XmlAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")]
public int Id { get; set; }

[XmlAttribute(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")]
public int Ref { get; set; }

private bool _nil;

[XmlAttribute("nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public bool Nil
{
    get
    {
        return _nil;
    }
    set
    {
        _nil = value;
    }
}