C#将HttpResponseMessage反序列化为Object

时间:2015-08-28 13:48:54

标签: c# asp.net .net serialization httpresponse

我在将HttpResponseMessage反序列化为对象时遇到了一些问题。 问题是当对象应该反序列化时,所有字段都为null,不会抛出任何异常。

HttpContent content = new StringContent(xml);
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/xml");
HttpResponseMessage response = await client.PostAsync("URL", content).ConfigureAwait(false);
// Parse response
if (response.IsSuccessStatusCode)
{
    XmlSerializer serializer = new XmlSerializer(typeof(ResponseObject));
    Stream responseStream = await response.Content.ReadAsStreamAsync();
    ResponseObject responseObject = serializer.Deserialize(responseStream) as ResponseObject;

    //Possible example of wrong data
    Console.WriteLine(responseObject.Message);
}

[XmlRoot("response")]
public class ResponseObject
{
    [XmlElement("session")]
    public string Session { get; set; }

    [XmlElement("status")]
    public string Status { get; set; }

    [XmlElement("message")]
    public string Message { get; set; }
}

作为字符串的响应消息

"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>
<response>
    <val n=\"session\">SESSION ID</val>
    <val n=\"status\">201</val>
    <val n=\"message\">Created</val>
</response>"

我错过了什么吗?我是序列化/反序列化的新手。 感谢指针。

1 个答案:

答案 0 :(得分:1)

好的,我在评论中借助Eser和Biscuits解决了这个问题。

我试图重用代码,并没有真正想到响应消息与早期项目有不同的结构。

我将ResponseObject更改为:

<paper-input-container auto-validate>
   <label>Social Security Number</label>
   <ssn-input class="paper-input-input"></ssn-input>
   <paper-input-error>SSN invalid!</paper-input-error>
</paper-input-container>

我不知道这是否是最佳解决方案,但它有效。