永发信息网

请教C#下如何序列化自定义结构或类

答案:2  悬赏:10  手机版
解决时间 2021-01-27 07:31
请教C#下如何序列化自定义结构或类
最佳答案
C#可以序列化,一般可以转成[二进制序列化][SOAP序列化][XML 序列化],就举个XML的例子吧。写了一个类并序列化和反序。
1、我写的是控制台程序
2、要引用using System.Xml.Serialization;using System.IO;
3、Person类中,Address属性我定义了忽略,他不会被序列化,所以你打开XML是看不到这个字段的。
4、文件我写死了,是D盘的1234.xml,你可以改。
=====代码====
[Serializable]
public class Person
{
    /// 
    /// 姓名
    /// 

    public string Name { get; set; }
    /// 
    /// 年龄
    /// 

    public int Age { get; set; }
    /// 
    /// 地址,属性指这个字段不序列化
    /// 

    [XmlIgnore]
    public string Address { get; set; }
}上面是个类,要序列化,就要写特性[Serializable],下面是我写的两个方法
/// 
/// 序列化
/// 

/// 
/// 
static void CreateSerialize(Type type, object obj)
{
    XmlSerializer xs = new XmlSerializer(type);
    Stream stream = new FileStream(@"d:\1234.XML", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
    xs.Serialize(stream, obj);
    stream.Close();
}
/// 
/// 反序
/// 

/// 
/// 
static object XMLDeserialize(Type type)
{
    XmlSerializer xs = new XmlSerializer(type);
    Stream stream = new FileStream(@"d:\\1234.XML", FileMode.Open, FileAccess.Read, FileShare.Read);
    var str = xs.Deserialize(stream);
    stream.Close();
    return str;
}你可以在主程序中Main()中调用上面的方法,我给了例子。

//建立几个对象
List list = new List()
{
    new Person(){ Name = "张三", Age = 18, Address = "A小区" },
    new Person(){ Name = "李四", Age = 21, Address = "B小区" },
    new Person(){ Name = "王五", Age = 23, Address = "C小区" },
    new Person(){ Name = "赵六", Age = 17, Address = "D小区" },
    new Person(){ Name = "钱七", Age = 22, Address = "E小区" },
};
foreach (var obj in list)
{
    Console.WriteLine("Name = " + obj.Name + "\tAge = " + obj.Age + "\t地址 = " + (String.IsNullOrEmpty(obj.Address) ? "空" : obj.Address));
}
Console.WriteLine("序列化开始....");
CreateSerialize(typeof(List), list);
Console.WriteLine("序列化结束....");
Console.WriteLine("反序列化开始....");
var dList = XMLDeserialize(typeof(List)) as List;
foreach (var obj in dList)
{
Console.WriteLine("Name = " + obj.Name + "\tAge = " + obj.Age + "\t地址 = " + (String.IsNullOrEmpty(obj.Address) ? "空" : obj.Address));
}
Console.WriteLine("反序列化结束....");
Console.ReadKey();这只是个简单的例子。
全部回答
不可以
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
电脑主机连接笔记本后笔记本黑屏
greatchanges作文
动产的意思是什么啊?知道的请说下!
永正眼镜地址在什么地方,想过去办事,
南京中华门汽车站到火车站坐地铁要多长时间
江湖酒吧地址在哪,我要去那里办事
绣色地址好找么,我有些事要过去
嘉善罗星阁宾馆#这家酒店离西塘多远
生产要素市场的意思是什么啊?知道的请说下!
姓名测试你前世死因
这个电视剧叫什么名字
饰品店墙壁黑色软包怎么做,做饰品的墙上要挂
抱薪救火的意思是什么啊?知道的请说下!
D调民谣吧地址有知道的么?有点事想过去
求只有鱼知道的耽美文 重生之贱人要逆袭全文
推荐资讯
瑞卿运输有限公司地址好找么,我有些事要过去
北京市丰台区翠林小学怎么去啊,我要去那办事
汽车培训中心(泉州石狮)地址在什么地方,我要
锯佣的意思是什么啊?知道的请说下!
房屋租赁的前提是房屋的()A.所有权与经营权
已知sinxcosy=1/2,则cosxsiny的范围为多少
男性,33岁,发热1周伴鼻出血,牙龈出血,球
杨子休闲吧(自强路店)怎么去啊,我要去那办事
vivox7手机为什么一上网就发热啊 玩一会会儿
疯狂猜成语一个人桌子上有三本书还有灯火和圆
富昌物流有限公司地址在什么地方,我要处理点
餦餭的意思是什么啊?知道的请说下!
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?