为什么序列化的 DataContracts 中有虚假的 URL?

问题描述

根据我的类的大小,DataContract 类中几乎有一半的序列化文本都填充了虚假 URL,表示序列化类的命名空间,如下所示:

xmlns:i="http://www.w3.org/2001/XMLSchema-instance\
xmlns="http://schemas.datacontract.org/2004/07/Namespace/Of/Serialized/Class"

我得到了架构部分,并且我也理解用信号表示类的特定命名空间的优势,但是“http://schemas.datacontract.org/2004/07/”部分对我来说完全没用可以看到。该站点不存在,即使它存在,我也不知道它应该如何包含有关我的 命名空间的任何信息。

即使您说它是一种关键字形式以区别于其他 XML 命名空间,他们也可以使用更短的命名空间,而不是 ULR。

它们使我的 UnitTest 更难阅读,并占用了数据库中的大量空间。它们可以关闭吗?是否可以将它们更改为非 URL,以便我的 IDE 不会将它们显示链接?可以缩短吗?

解决方法

那是因为它们是URI,而不是URL;他们的工作是明确和可识别的; 指出任何事情都不是他们的工作。引用 RFC 3986 §1.2.2:

URI 本身只提供标识; URI 的存在既不保证也不暗示对资源的访问。

您可以使用 NamespaceDataContractAttribute 属性覆盖生成的 URI。