我正在使用DatacontractSerializer
将我的domainModel序列化为xml文件。
我得到的输出如下。
<z:anyType xmlns:i="http://www.w3.org/2001/XMLSchema-instance" z:Id="1" xmlns:d1p1="DCSerialization_IGITApproach" i:type="d1p1:X" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<d1p1:Name z:Id="2">Ankit</d1p1:Name>
<d1p1:PointsDictionary xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" z:Id="3" z:Size="1">
<d2p1:KeyValueOfstringPointsArrayq9VX7VJJ>
<d2p1:Key z:Id="4">key1</d2p1:Key>
<d2p1:Value xmlns:d4p1="http://schemas.datacontract.org/2004/07/SerializationApproach" z:Id="5">
<d4p1:points z:Id="6" z:Size="2">
<d2p1:double>45.5</d2p1:double>
<d2p1:double>546.45</d2p1:double>
</d4p1:points>
</d2p1:Value>
</d2p1:KeyValueOfstringPointsArrayq9VX7VJJ>
</d1p1:PointsDictionary>
</z:anyType>
我想摆脱这些“d1p1”名称空间前缀,只希望</PointDictionary>
像标记而不是</d1p1:PointsDictionary>
。
我已经尝试将DataMember属性放在我的类属性上,但它并没有解决很多问题。
由于最终用户可以编辑输出XML文件,因此与上述文件相比,我希望看到更清晰的XML文件。
首要任务是仅通过代码控制它,如果不可能,则转到XSLT或任何其他模式。
答案 0 :(得分:5)
使用空命名空间似乎删除了前缀。使用以下DataContract属性设置您的类:
[DataContract(Namespace="")]
public class MyClass
{ ... }
然后确保在(反)序列化时将名称空间设置为空字符串:
DataContractSerializer deserializer = new DataContractSerializer(typeof(MyClass), typeof(MyClass).Name, "");
答案 1 :(得分:4)
看起来DataContractSerializer
没有对前缀进行太多控制。如果要控制名称空间前缀,XML Serialization and namespace prefixes的答案建议使用XmlSerializer
。
您的问题不清楚是否要完全删除域模型的名称空间前缀。上面的示例有几个名称空间前缀:d1p1,d2p1,d4p1。 Changing namespace for XML file in XSL Translation提供了有关使用XSLT重命名前缀的一些指导。
答案 2 :(得分:0)
您应该能够通过确保您尝试序列化为XML的类位于同一个命名空间中来删除这些前缀。例如,我有两个类ApplicationListResponse和Application。以前,名称空间是Models.Responses和Models.Responses.Application。我将两个命名空间都更改为&#34;模型&#34;并删除了XML输出中的前缀。