首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Serialization.InvalidDataContractException未被处理

Serialization.InvalidDataContractException未被处理
EN

Stack Overflow用户
提问于 2013-08-22 13:13:11
回答 1查看 2.1K关注 0票数 1
代码语言:javascript
复制
public class SerializablionHelper
{
  public SerializablionHelper()
  {
    this.Entities = new Collection<Base>();
  }

  public ICollection<Base> Entities { get; set; }
}

// [DataContract]
// [KnownType(typeof(A))]
// [KnownType(typeof(B))]
public abstract class Base
{
}

[DataContract]
public class A : Base
{
  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();
  serList.Entities.Add(objectA);
  serList.Entities.Add(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);
  }
}

当我运行这段代码时,我会得到这个异常。

类型'XMLSerializer.Program+A‘不能从未标记为DataContractAttribute或SerializableAttribute的类型继承。考虑使用DataContractAttribute或SerializableAttribute标记基类型‘DataContractAttribute’或SerializableAttribute,或者从派生类型中删除它们。

当我重新提出这个代码时:

代码语言:javascript
复制
// [DataContract]
// [KnownType(typeof(A))]
// [KnownType(typeof(B))]

密码会起作用的。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-22 13:29:33

我想这样做:

代码语言:javascript
复制
[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);
  }
}

我希望这能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18381494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档