[KnownType]和[XmlInclude]中的序列化之间的区别

use*_*858 2 wcf

我有几个WCF数据合同如下:

        [DataContract] 
        public class Hatchback: Car
        {
            [DataMember]   
            public int Wheels;
        } 

        [KnownType(Hatchback)] 
        [DataContract] 
        public abstract class Car
        {

        } 
Run Code Online (Sandbox Code Playgroud)

我也可以这样写:

        [DataContract] 
        public class Hatchback: Car
        {
            [DataMember]   
            public int Wheels;
        } 

        [XmlInclude(Hatchback)] 
        [DataContract] 
        public abstract class Car
        {

        } 
Run Code Online (Sandbox Code Playgroud)

这两种不同类型的实现之间的区别是什么?XmlInclude比KnownType有什么优点/缺点吗?

Yan*_*You 5

XmlIncludeAttribute通常用于使用XmlSerializer进行序列化/反序列化,而KnownTypeAtrribute用于DataContractSerializer.

这两个属性用于相同目的---指定在序列化或反序列化给定类型时应由XmlSerializer/DataContractSerializer识别的类型.