首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从字符串反序列化XML

从字符串反序列化XML
EN

Stack Overflow用户
提问于 2013-02-01 20:08:04
回答 2查看 111.2K关注 0票数 44

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

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

代码语言:javascript
复制
<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>

所以我有一个这样的类:

代码语言:javascript
复制
[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 (NB )将字符串作为StatusDocumentItem类型的对象获取的方法。operationXML包含字符串):

代码语言:javascript
复制
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属性,该属性阻止了我的反序列化。没有这个属性,一切都运行得很好。下面是它的外观:

代码语言:javascript
复制
"<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>"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-01 20:45:26

试试这个:

代码语言:javascript
复制
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();

是否显示"Job put in queue"?

票数 113
EN

Stack Overflow用户

发布于 2021-10-14 03:22:15

这个通用扩展对我来说工作得很好...

代码语言:javascript
复制
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);
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14645964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档