3

このようなXMLタイプのデータを取得します。

<Response>
  <Clients>
    <Client>
      <ID>1</ID>
      <Name>John</Name>
      <Age>25</Age>
      <Address>Some address</Address>
    </Client>
    <Client>
      <ID>2</ID>
      <Name>Mark</Name>
      <Age>22</Age>
      <Address>Some address2</Address>
    </Client>
    <Client>
      <ID>3</ID>
      <Name>Phil</Name>
      <Age>30</Age>
      <Address>Some address3</Address>
    </Client>
  </Clients>
</Response>

C#では、次のコードがあります。

[XmlRoot("Response")]
public class MyClients
{
    [XmlElement("Clients", typeof(MyClient))]
    public List<MyClient> Clients { get; set; }
}

public class MyClient
{
    [XmlElement("ID")]
    public int ID;

    [XmlElement("Name")]
    public string Name;

    [XmlElement("Age")]
    public int Age;

    [XmlElement("Address")]
    public string Address;
}

そして私はこのデータを取得しようとします

public ActionResult GetClients()
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("someUrl");
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    XmlSerializer serializer = new XmlSerializer(typeof(WFMClientsList));
    Stream receiveStream = response.GetResponseStream();
    WFMClientsList clients = (MyClients)serializer.Deserialize(receiveStream);
}

しかし、私は何の反応もありません。

List<MyClient>XMLを正しく逆シリアル化する方法を誰かが説明できますか?

4

3 に答える 3

5

問題は、宣言した内容が実際にはXMLと一致しないことです。現在の宣言からオブジェクトをシリアル化すると、次のようになります。

<?xml version="1.0" encoding="utf-16"?>
<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Clients>
    <ID>1</ID>
    <Name>John</Name>
    <Age>25</Age>
    <Address>Some address</Address>
  </Clients>
</Response>

試す:

[XmlRoot("Response")]
public class MyClients
{
    [XmlArray("Clients")]
    [XmlArrayItem("Client")]
    public List<MyClient> Clients { get; set; }
}

[XmlRoot("Client")]
public class MyClient
{
    [XmlElement("ID")]
    public int ID;
    [XmlElement("Name")]
    public string Name;
    [XmlElement("Age")]
    public int Age;
    [XmlElement("Address")]
    public string Address;
}

生成するもの:

<?xml version="1.0" encoding="utf-16"?>
<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Clients>
    <Client>
      <ID>1</ID>
      <Name>John</Name>
      <Age>25</Age>
      <Address>Some address</Address>
    </Client>
  </Clients>
</Response>
于 2012-07-18T16:24:31.587 に答える
1

これは間違っているにXmlSerializer serializer = new XmlSerializer(typeof(WFMClientsList)); 違いないXmlSerializer serializer = new XmlSerializer(typeof(MyClients));

クラスの属性を失いましたMyClient

于 2012-07-18T15:07:24.847 に答える
0
  public static T DeserializeObject<T>(string xml)
        {
            XmlSerializer xs = new XmlSerializer(typeof(T));
            MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(xml));
            XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
            return (T)xs.Deserialize(memoryStream);
        }


private static Byte[] StringToUTF8ByteArray(string pXmlString)
        {
            UTF8Encoding encoding = new UTF8Encoding();
            byte[] byteArray = encoding.GetBytes(pXmlString);
            return byteArray;
        }
于 2012-07-18T15:25:03.207 に答える