web-dev-qa-db-ja.com

StringからXMLをデシリアライズ

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>

だから私はこのためのクラスを持っています:

[XmlRoot]
public class StatusDocumentItem
{
    [XmlElement]
    public string DataUrl;
    [XmlElement]
    public string LastUpdated;
    [XmlElement]
    public string Message;
    [XmlElement]
    public int State;
    [XmlElement]
    public string StateName;
}

そして、これは私が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);

しかし、私の結果オブジェクトは常に空です。私は何を間違えていますか?

更新。 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>"
28
disasterkid

これを試して:

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();

「ジョブがキューに入れられました」と表示されますか?

70
Cédric Bignon