假设以下 XML:
<A>
<B>
<B1>b1Value</B1>
<B2>b2Value</B2>
<B3>b3Value</B3>
</B>
<C Attr="val1"/>
<C Attr="val2"/>
<C Attr="val3"/>
</A>
以及以下所需的反序列化类:
public class C
{
[XmlAttribute]
public string Attr { get; set; }
}
[XmlRoot]
public class A
{
[XmlElement("C")]
public C[] Cs { get; set; }
public string B1 { get; set; }
public string B2 { get; set; }
public string B3 { get; set; }
}
如何反序列化 XML,以便我的 A 类具有属性 B1、B2 和 B3,而不具有父属性 B?
当我使用此代码时:
string xml =
@"<A>
<B>
<B1>b1Value</B1>
<B2>b2Value</B2>
<B3>b3Value</B3>
</B>
<C Attr=""val1""/>
<C Attr=""val2""/>
<C Attr=""val3""/>
</A>";
XmlSerializer serializer = new XmlSerializer(typeof(A));
A a;
using (TextReader reader = new StringReader(xml))
{
a = serializer.Deserialize(reader) as A;
}
所有 BX 属性均为空白。
谢谢。
最佳答案
您可以添加只读属性来访问所需级别的数据。
public class C
{
[XmlAttribute]
public string Attr { get; set; }
}
public class B
{
[XmlElement]
public string B1 { get; set; }
[XmlElement]
public string B2 { get; set; }
[XmlElement]
public string B3 { get; set; }
}
[XmlRoot]
public class A
{
[XmlElement("C")]
public C[] Cs { get; set; }
[XmlElement("B")]
public B B { get; set; }
[XmlIgnore()]
public string B1 => B?.B1;
[XmlIgnore()]
public string B2 => B?.B2;
[XmlIgnore()]
public string B3 => B?.B3;
}
关于c# - 反序列化 XML 时绕过特定父节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59970296/