2012-11-30 64 views
4

我有一个CRM实体XML信息如下:XML序列化失去命名空间

<c:KeyValuePairOfstringanyType xmlns:c="ns1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" > 
.... 
<c:value i:type="**b:AliasedValue**" **xmlns:b="ns3"**> 
SomethingHere... 
</c:value> 
</c:KeyValuePairOfstringanyType> 

然后我把它反序列化的对象和序列化回XML
我得到

<c:KeyValuePairOfstringanyType xmlns:c="ns1" xmlns:i="http://www.w3.org/2001/XMLSchema- instance" > 
<c:value i:type="b:AliasedValue" > 
SomethingHere... 
</c:value> 
</c:KeyValuePairOfstringanyType> 

我松xmlns:b定义。 任何想法为什么?

+1

只是一个猜测(但有些受过教育),但“B”的命名空间实际上并不在一个元素中使用,就像在属性的值。不要太了解.net XML库,但应该有一个选项不去除“未使用”的命名空间 –

回答

0

42是正确的:属性值不带任何默认语义,所以命名空间的用法不被xml处理器识别。

如果你想参考一些b - 数据在你i:type -attribute,你我使用mapping元素c:value用(假设)b:value相关联,即:

<mapping xml:id="idXY'/> 
... 
<c:value c:ref="idXY">...</c:value> 
... 
<b:value b:ref="idXY">...</b:value> 
... 

...你哪里将在相应的xml模式中声明_:ref作为IDREF属性。你可能必须调整设计为1:n-/m:n - 映射,例如通过让推荐人成为_:value的子元素。

最好的问候,卡斯滕