C# 序列化DBML对象时遇到的问题#

C# 序列化DBML对象时遇到的问题#,c#,linq-to-sql,serialization,C#,Linq To Sql,Serialization,我正在尝试使用此代码序列化一些Linq对象 private byte[] GetSerializedObj(object o) { try { DataContractSerializer formatter = new DataContractSerializer(o.GetType()); MemoryStream memStream = new MemoryStream(); formatter.WriteObject(mem

我正在尝试使用此代码序列化一些Linq对象

private byte[] GetSerializedObj(object o)
{
    try
    {
        DataContractSerializer formatter = new DataContractSerializer(o.GetType());
        MemoryStream memStream = new MemoryStream();
        formatter.WriteObject(memStream, o);
        return memStream.ToArray();
    }
    catch (Exception ex)
    {
        throw new Exception("Could not serialize object", ex); 

    }
}
这适用于所有对象。我将DBML标记为单向序列化。我的DBML中有一个类型B,它派生自类型A。我可以序列化每个类型,但类型C上有一个类型B的集合。当我尝试序列化一个加载了B的类型C时,它失败了,出现了这样的消息

{“使用数据协定名称键入“B” “B:” 不应为。添加任何不应为的类型 静态已知到已知的列表 类型-例如,通过使用 KnownTypeAttribute属性或由 将它们添加到已知类型列表中 已传递给DataContractSerializer。“}

有什么想法吗?每一个都很好

更新1

我还应该解释我知道错误的含义。我以前使用过knowntype属性。我这里有两个问题。一个是DBML应该生成已知属性。另一个问题是,当我自己创建类时,为什么要序列化它们。比如说,

A item = new B()
GetSerializedObj(item);
这很有效

但事实并非如此

C item = new C();
item.Bs.Add(new B());
GetSerializedObj(item);
更新2


当您将序列化设置为单向时,所有类都将获得datacontract属性,并且还将获得成员的datamemeber属性。

答案在异常消息中。。。将KnownTypeAttribute应用于A类:

[KnownType(typeof(B))]
class A
{
    ...
}

你把DataContract属性放在B类和C类上了吗?我只是把它们添加到类中。我真的以为它会被生成。