下面我有以下对象:
[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
总是有一个Id
,它是null或它应该具有的值。我希望Ref
和element4
成为element4
内属性的值,具体取决于[XmlAttribute("Id")]
是否具有该属性。
我想知道我有什么遗失的东西吗?
我还尝试为此类[XmlAttribute("z:Id")]
添加XMLElement标记的特定名称,但似乎没有做任何事情。我也尝试过包含像IsNullable
这样的命名空间,但这会导致错误。
我还尝试将XMLElement
置于element4 nil="true"
标记内,但是对于具有ExampleObject2
的XML元素,但它使整个Hotline
为null,这并不完全正确我正在寻找什么。
我已经看过以下问题并且遇到了同样的问题。
how to deserialize an xml node with a value and an attribute using asp.net serialization
谢谢
答案 0 :(得分:1)
我最终使用像@GeorgeBirbilis这样的Nil属性来修复它并将其与@ 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;
}
}