首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将对象转换为XML字符串

将对象转换为XML字符串
EN

Stack Overflow用户
提问于 2012-07-12 16:07:14
回答 5查看 240.6K关注 0票数 101

我从一个XSD文件中的工具xsd.exe中获得了一个名为WebserviceType的类。

现在我想将一个WebServiceType对象的实例反序列化为一个字符串。我该怎么做呢?

MethodCheckType对象有一个WebServiceType数组作为参数。

我的第一次尝试就像我序列化它一样:使用一个XmlSerializer和一个StringWriter (在序列化时我使用了StringReader)。

这是我序列化WebServiceType对象的方法:

代码语言:javascript
复制
XmlSerializer serializer = new XmlSerializer(typeof(MethodCheckType));
        MethodCheckType output = null;
        StringReader reader = null;

        // catch global exception, logg it and throw it
        try
        {
            reader = new StringReader(path);
            output = (MethodCheckType)serializer.Deserialize(reader);
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            reader.Dispose();
        }

        return output.WebService;

编辑:

也许我可以换一种说法:我得到了这个MethodCheckType对象的一个实例,另一方面,我得到了从中序列化这个对象的XML文档。现在我想把这个实例转换成一个字符串形式的XML文档。在此之后,我必须证明这两个字符串( XML文档)是否相同。我必须这样做,因为我对第一种方法进行了单元测试,在第一种方法中,我将XML文档读入StringReader并将其序列化为MethodCheckType对象。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-07-12 16:56:37

下面是两种方法的转换方法。this =您的类的实例

代码语言:javascript
复制
public string ToXML()
    {
        using(var stringwriter = new System.IO.StringWriter())
        { 
            var serializer = new XmlSerializer(this.GetType());
            serializer.Serialize(stringwriter, this);
            return stringwriter.ToString();
        }
    }

 public static YourClass LoadFromXMLString(string xmlText)
    {
        using(var stringReader = new System.IO.StringReader(xmlText))
        {
            var serializer = new XmlSerializer(typeof(YourClass ));
            return serializer.Deserialize(stringReader) as YourClass ;
        }
    }
票数 209
EN

Stack Overflow用户

发布于 2014-02-11 02:31:15

我意识到这是一个非常古老的帖子,但在看了L.B的回复后,我思考了如何改进公认的答案,并使其适用于我自己的应用程序。这是我想出来的:

代码语言:javascript
复制
public static string Serialize<T>(T dataToSerialize)
{
    try
    {
        var stringwriter = new System.IO.StringWriter();
        var serializer = new XmlSerializer(typeof(T));
        serializer.Serialize(stringwriter, dataToSerialize);
        return stringwriter.ToString();
    }
    catch
    {
        throw;
    }
}

public static T Deserialize<T>(string xmlText)
{
    try
    {
        var stringReader = new System.IO.StringReader(xmlText);
        var serializer = new XmlSerializer(typeof(T));
        return (T)serializer.Deserialize(stringReader);
    }
    catch
    {
        throw;
    }
}

这些方法现在可以放在静态帮助器类中,这意味着每个需要序列化的类都不会有重复的代码。

票数 81
EN

Stack Overflow用户

发布于 2014-04-14 19:49:35

代码语言:javascript
复制
    public static string Serialize(object dataToSerialize)
    {
        if(dataToSerialize==null) return null;

        using (StringWriter stringwriter = new System.IO.StringWriter())
        {
            var serializer = new XmlSerializer(dataToSerialize.GetType());
            serializer.Serialize(stringwriter, dataToSerialize);
            return stringwriter.ToString();
        }
    }

    public static T Deserialize<T>(string xmlText)
    {
        if(String.IsNullOrWhiteSpace(xmlText)) return default(T);

        using (StringReader stringReader = new System.IO.StringReader(xmlText))
        {
            var serializer = new XmlSerializer(typeof(T));
            return (T)serializer.Deserialize(stringReader);
        }
    }
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11447529

复制
相关文章

相似问题

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