C#中对DataSet序列化和序列化

jiawuxian 2014-01-29 01:00:39
需求如下:
在DataSet中对Table的Column使用DataColumn的子类(DataColumnEx)用于保存一些特殊信息,同时这个DataSet会被序列化到本地,但将保存的信息反序列化为DataSet时,使用DataColumnEx保存的信息无法成功读取。
请教大神们如何,在这种情况下怎样才能将信息正确反序列化为DataColumnEx,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace PromTest
{

class Program
{
static void Main(string[] args)
{
DataSet ds = new DataSet();
DataTable table = new DataTable("tab1");
ds.Tables.Add(table);
table.Columns.Add(new DataColumnEx() { ItemCategory = "测试" });

BinSerialize(ds);
object obj= BinDeserialize();

if (((DataSet)obj).Tables[0].Columns[0] is DataColumnEx)
{
Console.WriteLine((((DataSet)obj).Tables[0].Columns[0] as DataColumnEx).ItemCategory);
}

Console.Read();
}

static void BinSerialize(object info)
{

using (Stream stream = new FileStream("a.bin", FileMode.Create, FileAccess.Write))
{
BinaryFormatter bf = new BinaryFormatter();

bf.Serialize(stream, info);
}
}

static object BinDeserialize()
{
using (Stream stream = new FileStream("a.bin", FileMode.Open, FileAccess.Read))
{
BinaryFormatter bf = new BinaryFormatter();

return bf.Deserialize(stream);
}
}
}

public class DataColumnEx : DataColumn
{
public string ItemCategory
{ get; set; }
}
}
...全文
295 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiawuxian 2014-01-29
  • 打赏
  • 举报
回复
再不明白可以把序列化的a.bin打开看下,再看反序列化的DataSet是什么样的
jiawuxian 2014-01-29
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
谁知道怎么就叫做“无法成功读取”? 你真的是懒得贴出异常信息么?
说明下:“无法成功读取”不是什么异常信息,而是在使用DataSet情况下序列化时使用DataColumnEx的对象信息,但在反序列化时却只能是DataColumn对象,原来属于DataColumnEx的"ItemCategory"信息没有了,不明白的可以先卸下我贴出来的代码,明白我的意图哈。
lijungui2008 2014-01-29
  • 打赏
  • 举报
回复
大神路过了了
  • 打赏
  • 举报
回复
谁知道怎么就叫做“无法成功读取”? 你真的是懒得贴出异常信息么?
jiawuxian 2014-01-29
  • 打赏
  • 举报
回复
自己先顶,走过的大神看过来

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧