动态 XmlSerializer 从 xml 序列化中识别对象类型?

发布于 2024-10-15 20:49:19 字数 126 浏览 1 评论 0原文

有没有办法创建一个 XmlSerializer 来存储序列化数据和数据类型,然后在反序列化时,它会自动识别序列化对象的类型并创建该类型的对象(作为对象返回)。

任何包含 XDocument、XML 文字的想法也将受到欢迎。

Is there any way to create an XmlSerializer that stores along with the serialized data the data type, then when deserializing, it automatically identifies the type of the serialized object and creates an object of that type (returned as object).

Any idea that includes XDocument, XML-literals would be welcommed too.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独﹏钓一江月 2024-10-22 20:49:19

关于 John Saunders 对 NetDataContractSerializer 的良好观察。 NetDataContractSerializer 相当晦涩难懂,几乎是 XML 序列化的复活节彩蛋。我有一篇特定于 VB.NET 的博客文章,展示了如何为必要的属性创建源代码,以及生成的 XML 的外观,http://bejabbers2.blogspot.com/2010/03/making-case-for-netdatacontractserializ.html
这是序列化类的样子

<s:Body>   
<DetermineCoordinates xmlns="http://tempuri.org/">   
<LocationInfo z:Id="1" z:Type="SharedTypes.LocationInfo" z:Assembly="SharedTypes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" xmlns="http://schemas.datacontract.org/2004/07/SharedTypes" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
   <latitude>0</latitude>   
<longitude>0</longitude>   
<postalCode z:Id="2">90125</postalCode>   
</LocationInfo>   
</DetermineCoordinates>   
</s:Body>  

Regarding John Saunders' good observation about the NetDataContractSerializer. The NetDataContractSerializer is pretty obscure, almost an Easter Egg for XML Serialization. I have VB.NET specific blog post that shows how to create the source code for the necessary attribute, and what the resultant XML looks, http://bejabbers2.blogspot.com/2010/03/making-case-for-netdatacontractserializ.html.
Here is what a serialized class looks like

<s:Body>   
<DetermineCoordinates xmlns="http://tempuri.org/">   
<LocationInfo z:Id="1" z:Type="SharedTypes.LocationInfo" z:Assembly="SharedTypes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" xmlns="http://schemas.datacontract.org/2004/07/SharedTypes" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
   <latitude>0</latitude>   
<longitude>0</longitude>   
<postalCode z:Id="2">90125</postalCode>   
</LocationInfo>   
</DetermineCoordinates>   
</s:Body>  
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文