C# 序列化DBML对象时遇到的问题#
我正在尝试使用此代码序列化一些Linq对象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
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类上了吗?我只是把它们添加到类中。我真的以为它会被生成。