C# Serialization.InvalidDataContractException未处理

C# Serialization.InvalidDataContractException未处理,c#,exception,serialization,C#,Exception,Serialization,代码将起作用 问题是我不能将基类作为DataContract。 是否有任何方法可以使此代码在不将DataContract添加到基类的情况下工作,或者我必须采取另一种序列化策略?我希望: // [DataContract] // [KnownType(typeof(A))] // [KnownType(typeof(B))] [DataContract] [知识类型(类型(A))] [知识类型(类型(B))] 公共类SerializablionHelper { public Serializab

代码将起作用

问题是我不能将基类作为DataContract。 是否有任何方法可以使此代码在不将DataContract添加到基类的情况下工作,或者我必须采取另一种序列化策略?

我希望:

// [DataContract]
// [KnownType(typeof(A))]
// [KnownType(typeof(B))]
[DataContract]
[知识类型(类型(A))]
[知识类型(类型(B))]
公共类SerializablionHelper
{
public SerializablionHelper()
{
//this.Entities=新集合();
}
//公共ICollection实体{get;set;}
公共基A{get;set;}
公共基B{get;set;}
}
公共抽象类基
{
}
[数据合同]
公共A类:基本类
{
[数据成员]
公共int IntTest{get;set;}
[数据成员]
公共字符串字符串测试{get;set;}
}
[数据合同]
B类公共服务:基本服务
{
[数据成员]
公共int IntTest{get;set;}
[数据成员]
公共字符串字符串测试{get;set;}
}
公共静态void Main(字符串[]args)
{
var objectA=newa{IntTest=5,StringTest=“TestA”};
var objectB=newb{IntTest=25,StringTest=“TestB”};
var serList=newserializablionhelper{A=objectA,B=objectB};
var dcSerializer=新的DataContractSerializer(typeof(SerializablionHelper));
var xmlWriterSetting=new XmlWriterSettings(){Indent=true};
使用(var xmlWriter=xmlWriter.Create(“C:\\test.xml”,xmlWriterSetting))
{
dcSerializer.WriteObject(xmlWriter,serList);
}
}

我希望这会有所帮助。

尝试将DataContract放在SerializablionHelper上。这会有帮助吗?其他错误消息没有相同的异常。
// [DataContract]
// [KnownType(typeof(A))]
// [KnownType(typeof(B))]
[DataContract]
[KnownType(typeof(A))]
[KnownType(typeof(B))]
public class SerializablionHelper
{
  public SerializablionHelper()
  {
    //this.Entities = new Collection<Base>();
  }
    // public ICollection<Base> Entities { get; set; }

  public Base A { get; set; }

  public Base B { get; set; }
}

public abstract class Base
{
}

[DataContract]
public class A : Base
{
  [DataMember]
  public int IntTest { get; set; }

  [DataMember]
  public string StringTest { get; set; }
}

[DataContract]
public class B : Base
{
  [DataMember]
  public int IntTest { get; set; }

  [DataMember]
  public string StringTest { get; set; }
}


public static void Main(string[] args)
{
  var objectA = new A { IntTest = 5, StringTest = "TestA" };
  var objectB = new B { IntTest = 25, StringTest = "TestB" };

  var serList = new SerializablionHelper { A = objectA, B = objectB };
  var dcSerializer = new DataContractSerializer(typeof(SerializablionHelper));


  var xmlWriterSetting = new XmlWriterSettings() { Indent = true };
  using (var xmlWriter = XmlWriter.Create("C:\\test.xml", xmlWriterSetting))
  {
    dcSerializer.WriteObject(xmlWriter, serList);
  }
}