Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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
将xml反序列化为C#列表为空?_C#_Xml_Deserialization_Poco - Fatal编程技术网

将xml反序列化为C#列表为空?

将xml反序列化为C#列表为空?,c#,xml,deserialization,poco,C#,Xml,Deserialization,Poco,除以下列表外,所有反序列化都有效: (resdes是一个列表) 这项工作: <Return> <test>0010000725</test> </Return> public class Return { // ELEMENTS [XmlElement("test")] public Test test{ get; set; } } 您需要创建两个类,如下所示: [Serializable]

除以下列表外,所有反序列化都有效:

(resdes是一个列表)

这项工作:

 <Return>
  <test>0010000725</test> 
  </Return>


    public class Return 
{

    // ELEMENTS
    [XmlElement("test")]
    public Test test{ get; set; }

 }

您需要创建两个类,如下所示:

[Serializable]
[XmlRoot("ResDes")]
[XmlType]
public class ResDes
{
    [XmlElement("item")]
    public List<ResDesItem> ResDesItem { get; set; }
}
然后使用以下代码对其进行反序列化,如下所示:

        XmlSerializer xmlReq = new XmlSerializer(typeof(ResDes));
        string xml = @"<ResDes> <item><PoBox/><City1>South Korea</City1><Country>SK</Country> </item></ResDes>";

        Stream stream = new MemoryStream(Encoding.Unicode.GetBytes(xml));
        var resposnseXml = (ResDes)xmlReq.Deserialize(stream);
XmlSerializer xmlReq=新的XmlSerializer(typeof(ResDes));
字符串xml=@“南朝鲜”;
Stream=newmemoryStream(Encoding.Unicode.GetBytes(xml));
var resposnseXml=(ResDes)xmlReq.Deserialize(stream);
*注意:不要忘记在类的每个属性或成员上添加[DataMember]*

如果要以DataContract方式执行此操作,请按以下方式使用:

[DataContract]
[XmlRoot("item")]
[XmlType]
public class ResDesItem
{
    [XmlElement("PoBox")]
    [DataMember]
    public string PoBox { get; set; }
    [XmlElement("City1")]
    [DataMember]
    public string City1 { get; set; }
    [XmlElement("Country")]
    [DataMember]
    public string Country { get; set; }
}

[DataContract]
[XmlRoot(“ResDes”)]
[XmlType]
公共类ResDes
{
[XmlElement(“项目”)]
[数据成员]
公共列表ResDesItem{get;set;}
}

rest与我之前的回答相同。

您是否尝试使用
[Serializable]
属性标记ResDesItem类?您好,我目前正在为电话平台开发,因此我使用了其等效的[DataContract()],但它仍然是空的
ResDesItem
类在哪里?你能粘贴那个类吗?嗨,Mahesh,我确实尝试了上面的代码,但是我没有使用Serializable属性,我不得不使用DataContract,因为它只在windows phone中可用,但仍然不起作用。为什么你回答了两次?如果有人想使用[DataContract]进行序列化,第二个答案会起作用,如果有人想使用它[可序列化]答案1将起作用。因此,我为它添加了单独的答案。@JohnSaunders,我需要删除任何答案吗?嗨,我确实尝试了这段代码,但是我得到了异常,因为我想反序列化所有xml,所以将其改为流并尝试反序列化响应soap头会产生异常,但是我猜你的答案会起作用,It’谢谢你的帮助
[Serializable]
[XmlRoot("ResDes")]
[XmlType]
public class ResDes
{
    [XmlElement("item")]
    public List<ResDesItem> ResDesItem { get; set; }
}
[Serializable]
[XmlRoot("item")]
[XmlType]
public class ResDesItem
{
    [XmlElement("PoBox")]
    public string PoBox { get; set; }
    [XmlElement("City1")]
    public string City1 { get; set; }
    [XmlElement("Country")]
    public string Country { get; set; }
}
        XmlSerializer xmlReq = new XmlSerializer(typeof(ResDes));
        string xml = @"<ResDes> <item><PoBox/><City1>South Korea</City1><Country>SK</Country> </item></ResDes>";

        Stream stream = new MemoryStream(Encoding.Unicode.GetBytes(xml));
        var resposnseXml = (ResDes)xmlReq.Deserialize(stream);
[DataContract]
[XmlRoot("item")]
[XmlType]
public class ResDesItem
{
    [XmlElement("PoBox")]
    [DataMember]
    public string PoBox { get; set; }
    [XmlElement("City1")]
    [DataMember]
    public string City1 { get; set; }
    [XmlElement("Country")]
    [DataMember]
    public string Country { get; set; }
}
[DataContract]
[XmlRoot("ResDes")]
[XmlType]
public class ResDes
{
    [XmlElement("item")]
    [DataMember]
    public List<ResDesItem> ResDesItem { get; set; }
}