请注意,此应用程序使用Silverlight5:
我有这样的xml:
<A>
<B>
<C>C1</C>
<D>D1</D>
</B>
<B>
<E>E1</E>
<F>F1<F1>
</B>
</A>
我在Parent类中遇到问题,即&#34; A&#34;。我将如何管理&#34; B&#34; ?以及如何在反序列化时访问两个B内的数据节点(子节点)?因为我将拥有A类的对象并且具有该对象我将如何区分这两个&#34; B&#34;接近&#34; C1,D1,E1,F1和#34;吗
My try to do this is :
[XmlRoot(ElementName = "A")]
public class Parameter
{
[XmlElement("B")] //But what to do for another "B"
public B B { get; set; }
}
这是B级
[XmlRoot(ElementName = "B")]
public class Parameter
{
[XmlElement("C")]
public string Label { get; set; }
[XmlElement("D")]
public string Type { get; set; }
}
但是E和F元素又是怎么做的? 如何在进行去核化时获得C1,D1和E1和F1?
在Andy Jones
之后编辑,假设我试图获得&#34; A&#34;的对象。像这样的课:
XmlSerializer deserializer = new XmlSerializer(typeof(A));
XmlReader reader = XmlReader.Create(new StringReader(xmlstring));//HerexmlString contains my xml given above
A a = (A)deserializer.Deserialize(reader);
现在使用对象"a"
我想访问C1,D1和C2,D2。 然后该怎么做?
答案 0 :(得分:1)
对XML的小修正:
<F>F1<F1>
应该是
<F>F1</F>
除此之外,看起来A类应该有B元素的集合:
public class A
{
public List<B> B { get; set; }
}
并且您的B类应具有C,D,E和F的属性:
public class B
{
public string C { get; set; }
public string D { get; set; }
public string E { get; set; }
public string F { get; set; }
}
答案 1 :(得分:1)
您将无法使用序列化来处理此XML,因为您对B节点有两种不同的定义。
你能得到的最接近的是:
<A>
<B>
<C>C1</C>
<D>D1</D>
</B>
<B>
<C>C2</C>
<D>D2</D>
</B>
</A>
但首先你需要整理C#类。首先,您有两个具有相同名称的类和对“B”的错误引用。
A类应如下所示:
[XmlRoot(ElementName = "A")]
public class ParameterA
{
[XmlElement("B")]
public ParameterB B { get; set; }
}
......而“B”类应如下所示:
[XmlRoot(ElementName = "B")]
public class ParameterB
{
[XmlElement("C")]
public string Label { get; set; }
[XmlElement("D")]
public string Type { get; set; }
}
这将允许您获得如下所示的XML:
<A>
<B>
<C>C1</C>
<D>D1</D>
</B>
</A>
现在重复“B”。修改ParamaterA以获得B列表:
[XmlRoot(ElementName = "A")]
public class ParameterA
{
[XmlElement("B")]
public List<ParameterB> B { get; set; }
}
这将允许您创建上面的XML。
当您将XML反序列化为类时,您将能够像这样访问B的元素:
var firstParameter = a.B[0];
var secondParameter = a.B[1];
List<T>
允许您按索引访问元素(就像数组一样)。
您还可以使用foreach
迭代值:
foreach(ParameterB b in a.B)
{
...
}