Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何对给定样本进行反序列化_C#_.net_Deserialization_Silverlight 5.0_Xml Deserialization - Fatal编程技术网

C# 如何对给定样本进行反序列化

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

请注意,此应用程序使用Silverlight5:

我有这样的xml:

<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的重复。我已经为您编辑了这个问题,请查看最后一部分以了解我想要的内容。但它不是数组。你能帮我写一个参考代码来编辑我的零件代码吗?真的会有帮助吗?