.net – xml字符串的一般反序列化

我有一堆不同的DTO课程.它们在一段时间内被序列化成一个 XML字符串,并且镜像到网络应用程序的客户端.现在当客户端回放一个XML字符串时,我需要将其反序列化为它所代表的DTO类的一个实例.问题是我想使它成为通用的,可能是一个接收xml字符串并且吐出一个类型的对象的函数.像这样的长长的东西:
public sometype? Deserialize (string xml)
{
//some code here
return objectFromXml;
}

编辑:可怕的例子!我只是自相矛盾!

我不能做以下事情:

Person person = Deserialize(personXmlStringFromClient);

因为我不知道personXmlStringFromClient是Person DTO对象实例的表示.

我不知道是什么序列化对象给了我,这似乎是我的问题.我一直在阅读关于反射和其他技术,其中涉及将类型粘贴到xml中,以使解串器知道如何处理它.我似乎无法将它们整合在一起,成为一件工作.另外,在大多数例子中,作者知道反序列化后将会有什么类型的.欢迎任何建议!如果我需要做一些特别的序列化过程,请分享.

你可以使用通用的:
public T Deserialize<T>(string input)
        where T : class
    {
        System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(T));

        using (StringReader sr = new StringReader(input))
            return (T)ser.Deserialize(sr);
    }

如果你不知道它会是哪种类型,我假设你有一个固定数量的可能的类型,你可以尝试反序列化到每一个,直到你没有遇到异常.不是很好,但它会奏效.

或者,您可以检查外部对象名称的xml的开始,并希望能够从那里确定类型.这将取决于xml的外观.

编辑:根据您的编辑,如果调用者知道他们正在传递的类型,他们能否提供完全限定的类型名称作为字符串作为服务的附加参数?

如果是这样,你可以这样做:

Type t = Type.GetType(typeName);

并将Deserialize方法改为如下:

public object Deserialize(string input,Type toType)
{
    System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(toType);

    using (StringReader sr = new StringReader(input))
        return ser.Deserialize(sr);
}

但是,这只会给你一个对象…如果所有类型的实现一个通用的接口,你可以反序列化如上,但将返回类型更改为接口(并在返回语句中转换)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇