|
|
1
53
问题解决了!好吧,所以我终于到了那里 许多 帮助从 here !). 所以总结一下: 目标:
确定的问题/注意事项:
解决方案我创建了一个泛型类,在该类中,将泛型类型指定为要使用的抽象类型。这使类能够在抽象类型和具体类型之间进行“转换”,因为我们可以对转换进行硬编码(即,我们可以获得比XML序列化程序更多的信息)。 然后我实现了 IXML可序列化 接口,这是非常直接的,但是在序列化时,我们需要确保将具体类的类型写入XML,这样我们可以在反序列化时将其返回。注意这一点也很重要 完全合格 因为这两个类所在的程序集可能不同。当然,这里有一些类型检查和需要发生的事情。 因为xmlserializer无法强制转换,所以我们需要提供代码来实现这一点,所以隐式运算符随后会被重载(我甚至不知道您可以这样做!). AbstractXmlSerializer的代码如下:
那么,从那里,我们如何告诉XML序列化程序使用我们的序列化程序而不是默认的?我们必须在xml attributes type属性中传递类型,例如:
在这里,您可以看到,我们有一个集合和一个正在公开的属性,我们需要做的就是添加 类型 XML声明的命名参数,简单!D 注意:如果您使用此代码,我将非常感谢您的大声呼喊。它还将有助于推动更多人加入社区:) 现在,但不确定如何处理这里的答案,因为他们都有自己的赞成和反对。我会更新那些我觉得有用的(对那些没有的人没有冒犯)并在我有代表后关闭它。 有趣的问题和有趣的解决方法!:) |
|
|
2
9
需要注意的一点是,在xmlserialiser构造函数中,可以传递一个类型数组,而该类型数组可能难以解析。我已经使用过很多次了,其中一个集合或一组复杂的数据结构需要序列化,而这些类型存在于不同的程序集中等等。 XmlSerialiser Constructor with extraTypes param 编辑:我想补充一点,这种方法比XMLICLUDE属性等有好处,您可以找到一种方法,在运行时发现和编译可能的具体类型的列表,然后将它们塞进其中。 |
|
|
3
3
说真的,一个可扩展的POCO框架永远不会可靠地序列化为XML。我这么说是因为我可以保证有人会来,扩展你的课程,然后把它弄糟。 您应该研究使用XAML来序列化对象图。它的设计目的是这样做,而XML序列化则不是这样。
XAML序列化程序和反序列化程序处理泛型时不会出现问题,也不会处理基类和接口的集合(只要集合本身实现
|
|
|
4
2
这只是一个快速的更新,我没有忘记! 只是做了更多的研究,看起来我是一个胜利者,只需要把代码排序。 到目前为止,我有以下几点:
通过创建代理类作为序列化程序的中间层,似乎可以重写此行为(代码挂起)。这将基本上确定派生类的类型,然后按正常方式序列化。然后,这个代理类将把该XML返回到主序列化程序。 注意这个地方!^ ^ ^ |
|
|
5
2
这当然是解决问题的方法,但还有另一个问题,这在一定程度上破坏了您使用“可移植”XML格式的意图。当您决定在下一个版本的程序中更改类,并且您需要同时支持两种序列化格式——新的和旧的(因为您的客户机仍然使用旧的文件/数据库,或者他们使用产品的旧版本连接到您的服务器),就会发生糟糕的事情。但是您不能再使用这个序列化程序,因为您使用
看起来像是
它包含程序集属性和版本… 现在,如果您试图更改程序集版本,或者决定对其进行签名,那么这种反序列化将不起作用… |
|
|
6
1
我做过类似的事情。我通常要做的是确保所有XML序列化属性都在具体的类上,并且只让该类上的属性调用基类(如果需要),以检索序列化程序调用这些属性时将被反序列化/序列化的信息。它的编码工作要多一些,但是它的工作要比试图强制序列化程序做正确的事情要好得多。 |
|
|
7
1
更好的是,使用符号:
|