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>
我能够完美地得到我的对象,除了 element4
在 ExampleObject2
里面我的 Id
和 Ref
是空的,而 Value
有里面的正确值。
我想要它,这样 ExampleObject2
总是有一个 Value
,它要么是 null,要么是它应该具有的值。我希望 Id
和 Ref
成为 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;
}
}
下面我有以下对象:
[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>
我能够完美地得到我的对象,除了 element4
在 ExampleObject2
里面我的 Id
和 Ref
是空的,而 Value
有里面的正确值。
我想要它,这样 ExampleObject2
总是有一个 Value
,它要么是 null,要么是它应该具有的值。我希望 Id
和 Ref
成为 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;
}
}