从String反序列化XML

dis*_*kid 28 .net c# xml xml-deserialization

我正在尝试将我从Web服务获得的结果转换为字符串并将其转换为对象.

这是我从我的服务中得到的字符串:

<StatusDocumentItem><DataUrl/><LastUpdated>2013-01-31T15:28:13.2847259Z</LastUpdated><Message>The processing of this task has started</Message><State>1</State><StateName>Started</StateName></StatusDocumentItem>
Run Code Online (Sandbox Code Playgroud)

所以我有一个课程为:

[XmlRoot]
public class StatusDocumentItem
{
    [XmlElement]
    public string DataUrl;
    [XmlElement]
    public string LastUpdated;
    [XmlElement]
    public string Message;
    [XmlElement]
    public int State;
    [XmlElement]
    public string StateName;
}
Run Code Online (Sandbox Code Playgroud)

这就是我试图通过XMLDeserializer将该字符串作为StatusDocumentItem类型的对象(NB.operationXML包含字符串):

string operationXML = webRequest.getJSON(args[1], args[2], pollURL);
var serializer = new XmlSerializer(typeof(StatusDocumentItem));
StatusDocumentItem result;

using (TextReader reader = new StringReader(operationXML))
{
    result = (StatusDocumentItem)serializer.Deserialize(reader);
}

Console.WriteLine(result.Message);
Run Code Online (Sandbox Code Playgroud)

但我的结果对象总是空的.我究竟做错了什么?

更新.我从我的operationXML获得的值是这样的,并且有一个不必要的xmlns属性阻止了我的反序列化.没有这个属性,一切都很好.这是它的样子:

"<StatusDocumentItem xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><DataUrl/><LastUpdated>2013-02-01T12:35:29.9517061Z</LastUpdated><Message>Job put in queue</Message><State>0</State><StateName>Waiting to be processed</StateName></StatusDocumentItem>"
Run Code Online (Sandbox Code Playgroud)

Céd*_*non 72

试试这个:

string xml = "<StatusDocumentItem xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><DataUrl/><LastUpdated>2013-02-01T12:35:29.9517061Z</LastUpdated><Message>Job put in queue</Message><State>0</State><StateName>Waiting to be processed</StateName></StatusDocumentItem>";
var serializer = new XmlSerializer(typeof(StatusDocumentItem));
StatusDocumentItem result;

using (TextReader reader = new StringReader(xml))
{
    result = (StatusDocumentItem)serializer.Deserialize(reader);
}

Console.WriteLine(result.Message);
Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)

它是否显示"工作排队"?


CRG*_*CRG 13

这个通用扩展对我来说效果很好......

public static class XmlHelper
{
    public static T FromXml<T>(this string value)
    {
        using TextReader reader = new StringReader(value);
        return (T) new XmlSerializer(typeof(T)).Deserialize(reader);
    }
}
Run Code Online (Sandbox Code Playgroud)