C# 如何对给定样本进行反序列化
请注意,此应用程序使用Silverlight5: 我有这样的xml:C# 如何对给定样本进行反序列化,c#,.net,deserialization,silverlight-5.0,xml-deserialization,C#,.net,Deserialization,Silverlight 5.0,Xml Deserialization,请注意,此应用程序使用Silverlight5: 我有这样的xml: <A> <B> <C>C1</C> <D>D1</D> </B> <B> <E>E1</E> <F>F1<F1> </B> </A> XmlSerializer deserializ
<A>
<B>
<C>C1</C>
<D>D1</D>
</B>
<B>
<E>E1</E>
<F>F1<F1>
</B>
</A>
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);
[XmlRoot(ElementName = "A")]
public class ParameterA
{
[XmlElement("B")]
public ParameterB B { get; set; }
}
[XmlRoot(ElementName = "B")]
public class ParameterB
{
[XmlElement("C")]
public string Label { get; set; }
[XmlElement("D")]
public string Type { get; set; }
}
var firstParameter = a.B[0];
var secondParameter = a.B[1];
这是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实现去三角化?
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; }
}
在Andy Jones之后进行编辑,假设我尝试获取“A”类的对象,如下所示:
<A>
<B>
<C>C1</C>
<D>D1</D>
</B>
<B>
<E>E1</E>
<F>F1<F1>
</B>
</A>
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);
[XmlRoot(ElementName = "A")]
public class ParameterA
{
[XmlElement("B")]
public ParameterB B { get; set; }
}
[XmlRoot(ElementName = "B")]
public class ParameterB
{
[XmlElement("C")]
public string Label { get; set; }
[XmlElement("D")]
public string Type { get; set; }
}
var firstParameter = a.B[0];
var secondParameter = a.B[1];
现在使用对象“a”我想访问C1、D1和C2、D2那么怎么做呢?对XML进行了细微的修改:
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; }
}
<F>F1<F1>
您将无法使用序列化来处理此XML,因为B节点有两个不同的定义 您能得到的最接近的是:
<A>
<B>
<C>C1</C>
<D>D1</D>
</B>
<B>
<C>C2</C>
<D>D2</D>
</B>
</A>
…类别“B”应如下所示:
<A>
<B>
<C>C1</C>
<D>D1</D>
</B>
<B>
<E>E1</E>
<F>F1<F1>
</B>
</A>
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);
[XmlRoot(ElementName = "A")]
public class ParameterA
{
[XmlElement("B")]
public ParameterB B { get; set; }
}
[XmlRoot(ElementName = "B")]
public class ParameterB
{
[XmlElement("C")]
public string Label { get; set; }
[XmlElement("D")]
public string Type { get; set; }
}
var firstParameter = a.B[0];
var secondParameter = a.B[1];
这将允许您获取如下所示的XML:
<A>
<B>
<C>C1</C>
<D>D1</D>
</B>
</A>
List
允许您按索引访问元素(就像数组一样)
您还可以使用foreach
对值进行迭代:
foreach(ParameterB b in a.B)
{
...
}
谢谢你的回答,你似乎接近我想知道的。我还有两个问题,如果你也能回答的话,谢谢你来澄清我的疑问。(1)这是我唯一需要重复“B”和(2)我将如何使用B类包含的对象来访问“C2”和“D2”(B B B;)?重复的B将如何使我们访问C1、D1、C2、D2?请您给出这方面的代码(假设xml存储在“String XmlStringVariable;”)谢谢。当您反序列化到a中时,您将能够使用:a.B[0]和a.B[1]访问B的重复。我已经为您编辑了这个问题,请查看最后一部分以了解我想要的内容。但它不是数组。你能帮我写一个参考代码来编辑我的零件代码吗?真的会有帮助吗?