簡體   English   中英

將XML反序列化為對象

[英]Deserialize XML into Object

我試圖反序列化來自Amazons簡單數據庫服務的xml響應。

xml是這樣的。

<ListDomainsResponse xmlns="http://sdb.amazonaws.com/doc/2009-04-15/">
   <ListDomainsResult>
       <DomainName>Logging</DomainName>
       <DomainName>teets</DomainName>
   </ListDomainsResult>
   <ResponseMetadata>
      <RequestId>9d48122e-1ddf-8771-b771-b36599838ea0</RequestId>
     <BoxUsage>0.0000071759</BoxUsage>
   </ResponseMetadata>
</ListDomainsResponse>

而我要序列化為的對象是這個。

public class ListDomainsResponse  : Response
{
    public ListDomainsResult ListDomainsResult { get; set; }
}

public class ListDomainsResult
{
    public List<String> DomainNames { get; set; }

    public string NextToken { get; set; }
}

public class Response
{
    public static string NameSpace = "http://sdb.amazonaws.com/doc/2009-04-15/";

    public ResponseMetadata ResponseMetadata{ get; set; }
}

public class ResponseMetadata
{
    public string RequestId { get ; set; }

    public string BoxUsage { get; set; }
}

我的問題是,響應元數據正確地反序列化了,但是沒有反序列化稱為DomainName的字符串列表,每次它都是空的。

有人可以看到我在做什么錯。

更新了更多代碼

public async Task<Response> ListDomains (ListDomainsRequest request)
{
    using (Client = new HttpClient ()) {
        ListDomainsRequestMarshaller marshaller = new ListDomainsRequestMarshaller ();
        marshaller.Configure (request);
        HttpResponseMessage responseMessage = Client.GetAsync (marshaller.Marshal ()).Result;
        ListDomainsResponseUnMarshaller unmarshaler = new ListDomainsResponseUnMarshaller (responseMessage);
        return unmarshaler.Response;
    }
}

public ListDomainsResponseUnMarshaller (HttpResponseMessage message)
{
    XDocument doc = XDocument.Load (message.Content.ReadAsStreamAsync ().Result);

if (message.StatusCode.Equals (HttpStatusCode.OK)) {
    Serializer = new XmlSerializer (typeof(ListDomainsResponse), Response.NameSpace);
    Response = (ListDomainsResponse)Serializer.Deserialize (doc.CreateReader ());
    Response.HttpStatusCode = message.StatusCode;
    Response.ContentLength = (long)message.Content.Headers.ContentLength;
} else {
    Serializer = new XmlSerializer (typeof(Response));
    Response = (Response)Serializer.Deserialize (doc.CreateReader ());
    Response.HttpStatusCode = message.StatusCode;
    Response.ContentLength = (long)message.Content.Headers.ContentLength;
}
Serializer = null;
}

添加屬性幫助

[System.Xml.Serialization.XmlTypeAttribute (Namespace = "http://sdb.amazonaws.com/doc/2009-04-15/")]
[System.Xml.Serialization.XmlRootAttribute ("ListDomainsResponse", Namespace = "http://sdb.amazonaws.com/doc/2009-04-15/")]
public class ListDomainsResponse  : Response
{
    public ListDomainsResult ListDomainsResult { get; set; }
}

[System.Xml.Serialization.XmlTypeAttribute (Namespace = "http://sdb.amazonaws.com/doc/2009-04-15/")]
[System.Xml.Serialization.XmlRootAttribute (Namespace = "http://sdb.amazonaws.com/doc/2009-04-15/")]
public class ListDomainsResult
{
    [System.Xml.Serialization.XmlElementAttribute ("DomainName")]
    public string[] DomainName { get; set; }

    public string NextToken { get; set; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM