![](/img/trans.png)
[英]Problem to use DataContract Xml Serialization - KnownTypes
[英]I have a knowntype attribute on a datacontract and don't know how to modify xml to accept these knowntypes
数据合同示例
[DataContract(Namespace = "namespace")]
[KnownType(typeof(KnownType1))]
public class DataContract
{
[DataMember(IsRequired = true)]
public int Value;
}
如何编写xml来使用KnownType1代替DataContract。 我尝试做:(为了简化本示例,我忽略了名称空间和所有其他内容)
<DataContract>
<Value> 1</Value>
<KnownType1> ....</KnownType>
</DataContract>
我也尝试过用KnownType1替换DataContract节点,但是我也不认为这是正确的。
例如,我们遵循DTO:
[DataContract(Namespace = "namespace")]
[KnownType(typeof(KnownType1))]
public class DataContract
{
[DataMember(IsRequired = true)]
public int Value;
}
[DataContract(Namespace = "namespace1")]
public sealed class KnownType1 : DataContract
{
[DataMember(IsRequired = true)]
public int Value1;
}
为简单起见(我使用XmlTextWriter(Console.Out)
打印结果xml),序列化函数如下所示:
private void Serialize<T>(object value)
{
XmlObjectSerializer serializer = new DataContractSerializer(typeof(T));
var writer = new XmlTextWriter(Console.Out)
{
Formatting = Formatting.Indented
};
serializer.WriteObject(writer, value);
}
这是序列化:
[Fact]
public void Test()
{
Serialize<DataContract>(new KnownType1 { Value = 1, Value1 = 2 });
Serialize<DataContract>(new DataContract { Value = 1 });
}
结果输出:
<DataContract xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d1p1="namespace1" i:type="d1p1:KnownType1" xmlns="namespace">
<Value>1</Value>
<d1p1:Value1>2</d1p1:Value1>
</DataContract>
<DataContract xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="namespace">
<Value>1</Value>
</DataContract>
如您所见, KnownType1
xml包含其他i:type="d1p1:KnownType1"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.