繁体   English   中英

.NET(C#)中的XML序列化和架构

[英]Xml Serialization and Schemas in .net (C#)

以下问题是有关用于数据交换的.net类型库的XML序列化/反序列化和模式验证的问题。


第一个问题,如果我有一个自定义xml命名空间,请说“ http:// mydomain / mynamespace ”,是否必须添加一个

[XmlRoot(Namespace = "http://mydomain/mynamespace")]

我图书馆的每个班级。 还是有一种方法可以将此名称空间定义为整个程序集的默认名称?


第二个问题,总是添加名称空间的背后是否有原因?

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

即使没有实际引用任何名称空间? 我只是觉得它们给生成的xml增加了噪音。 有没有一种方法可以删除它们,而在生成的xml中仅具有自定义名称空间?


第三个问题,是否有工具来支持模式定义的生成(例如,针对程序集的所有公共[Serializable]类)以及针对特定模式对xml进行验证的工具?

如果有,您会推荐W3C或RELAX NG中的XML模式吗?

只需添加-“ xsi”等就可以在以后的值上支持xsi:nil之类的东西-众所周知的可空值模式。 它必须“仅向前”写入流,并且不知道(何时写入第一位)是否需要nil,因此它假定不必要地写入一次比使用完整的名称空间要好可能很多次。

1)XmlRoot只能在类/结构/接口级别(或返回值)上设置。 因此,您不能在装配级别上使用它。 您正在寻找的是XmlnsDefinitionAttribute ,但是我相信XamlWriter只会使用它。

2)如果您担心混乱,则应避免使用xml。 格式正确的xml充满混乱。 我相信可以通过多种方法与序列化程序生成的xml进行交互,但不能直接与XmlSerializer交互。 您对XmlWriter类产生的XML有更多的控制权。 在此处检查如何使用XmlWriter处理名称空间。

3)我相信XSD.exe可用于为POCO生成架构(我一直都是手工编写的;我可能很快就会用它来编写LOTS,等等!)。

工具-xsd.exe,带有类似如下的命令行

xsd /c /n:myNamespace.Schema.v2_0  myschema_v2_0.xsd

我将模式放在一个单独的项目中。

liqudXML ,如果有多个模式,或者您想要完全支持模式功能(带偏移量的DateTime,正/负小数)和跨平台生成,则很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM