当前位置:  开发笔记 > 编程语言 > 正文

是否可以序列化LINQ对象?

如何解决《是否可以序列化LINQ对象?》经验,为你挑选了3个好方法。

我想序列化一些LINQ生成的对象,并将它们作为二进制字段存储在表中(不管你怎么理解).我希望能够编写一些看起来像这样的代码:

SerialTestDataContext db = new SerialTestDataContext();

relation_table row = db.relation_tables.First();

MemoryStream memStream = new MemoryStream();
BinaryFormatter bin = new BinaryFormatter();
bin.Serialize(memStream, row);
Console.WriteLine("Serilized successfully");

TestTable tt = new testTable();
tt.data = new System.Data.Linq.Binary(memStream.ToArray());
db.testTables.InsertOnSubmit(tt);
db.SubmitChanges();
Console.WriteLine("Inserted successfully");

目前,即使我将生成的类标记为[Serializable],也会失败,因为其中一个LINQ继承的类不是.甚至可以这样做吗?



1> Marc Gravell..:

使用linq-to-sql(来自标签),然后是:您可以将dmbl标记为可序列化,它使用[DataContract]/[DataMember]方法.您可以通过在设计器中将"Serialization Mode"设置为"Unidirectional"来实现,或者您可以在dbml本身中执行此操作:

...

然后,您可以使用DataContractSerializer或NetDataContractSerializer来编写它(分别为xml或二进制).如果您需要可移植的东西(即不是MS/.NET特定的),那么protobuf-net将使用"协议缓冲区"规范来序列化数据合同.


天哪!它充满了星星!

2> Mykroft..:

按照Marc Gravell的建议,我编写了以下两段代码,这些代码块运行得非常好:

relation_table row = db.relation_tables.First();

MemoryStream memStream = new MemoryStream();
NetDataContractSerializer ndcs = new NetDataContractSerializer();
ndcs.Serialize(memStream, row);

byte[] stuff = memStream.toArray();

memStream = new MemoryStream(stuff);
row = ndcs.Deserialize(memStream);

db.relation_tables.Attach(row);
Console.WriteLine(row.data_table1.somedata + ": " + row.more_data);

Attach()调用为我填充外键依赖项,并将项与数据上下文相关联.



3> Bryan Watts..:

MSDN:序列化(LINQ to SQL)

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有