问题描述
需求如下:在DataSet中对Table的Column使用DataColumn的子类(DataColumnEx)用于保存一些特殊信息,同时这个DataSet会被序列化到本地,但将保存的信息反序列化为DataSet时,使用DataColumnEx保存的信息无法成功读取。请教大神们如何,在这种情况下怎样才能将信息正确反序列化为DataColumnEx,usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Data;usingSystem.IO;usingSystem.Runtime.Serialization.Formatters.Binary;namespacePromTest{classProgram{staticvoidMain(string[]args){DataSetds=newDataSet();DataTabletable=newDataTable("tab1");ds.Tables.Add(table);table.Columns.Add(newDataColumnEx(){ItemCategory="测试"});BinSerialize(ds);objectobj=BinDeserialize();if(((DataSet)obj).Tables[0].Columns[0]isDataColumnEx){Console.WriteLine((((DataSet)obj).Tables[0].Columns[0]asDataColumnEx).ItemCategory);}Console.Read();}staticvoidBinSerialize(objectinfo){using(Streamstream=newFileStream("a.bin",FileMode.Create,FileAccess.Write)){BinaryFormatterbf=newBinaryFormatter();bf.Serialize(stream,info);}}staticobjectBinDeserialize(){using(Streamstream=newFileStream("a.bin",FileMode.Open,FileAccess.Read)){BinaryFormatterbf=newBinaryFormatter();returnbf.Deserialize(stream);}}}publicclassDataColumnEx:DataColumn{publicstringItemCategory{get;set;}}}
解决方案
解决方案二:
自己先顶,走过的大神看过来
解决方案三:
谁知道怎么就叫做“无法成功读取”?你真的是懒得贴出异常信息么?
解决方案四:
大神路过了了
解决方案五:
引用2楼sp1234的回复:
谁知道怎么就叫做“无法成功读取”?你真的是懒得贴出异常信息么?
说明下:“无法成功读取”不是什么异常信息,而是在使用DataSet情况下序列化时使用DataColumnEx的对象信息,但在反序列化时却只能是DataColumn对象,原来属于DataColumnEx的"ItemCategory"信息没有了,不明白的可以先卸下我贴出来的代码,明白我的意图哈。
解决方案六:
再不明白可以把序列化的a.bin打开看下,再看反序列化的DataSet是什么样的