关于序列化与反序列化的问题。

longhui666888 2009-10-20 02:27:13
如何序列化和反序列化已经知道。求教:如何把类的属性的说明性文字如:

/// <summary>
/// 名称
/// </summary>
public string Name

里面的“名称”一起写到XML文件里?

又如何把对应的属性名和说明文字读取出来?
...全文
329 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
longhui666888 2009-12-29
  • 打赏
  • 举报
回复
结帖了,现在也没什么时间去研究这个了。综合大家的意见,我想应该是重写序列化的方法,把获取到的类的注释写到xml文件里。
wxxloveu 2009-12-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 builderc 的回复:]
可以试试用 Attribute Class

然后再你的变量上加个[Description(名称)]

[Description("名称")]
public string Name;

再序列化成XML, 看看是什么效果。 当然我没做任何测试,但我觉得大概可以这样实现
[/Quote]
createTim 2009-12-15
  • 打赏
  • 举报
回复
/// <summary>
/// 指令
/// </summary>
[Serializable]
public abstract class Code
{
/// <summary>
/// 指令头部
/// </summary>
public abstract CodeHead Head
{
get;
set;
}
}

/// <summary>
/// 单指令
/// </summary>
[Serializable]
public class BaseCode:Code
{
private CodeHead head;
/// <summary>
/// 指令头部
/// </summary>
public override CodeHead Head
{
get { return head; }
set { head = value; }
}
/// <summary>
/// 调试用
/// </summary>
/// <returns></returns>
public override string ToString()
{
return "Head=" + head;
}
}
longhui666888 2009-12-15
  • 打赏
  • 举报
回复
其实这个的目的就是想让客户看到xml的配置文件的时候,一下就明白每个节点的作用。一个折中的办法就是23楼所提到的。
sharpe 2009-11-14
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 eyuannet 的回复:]
[Serializable]
[XmlRootAttribute("简历")]
public class ss
{
[XmlElement("名称")]
public string Name { get; set; }
}
得到XML为
<xml>
<简历>
<名称>xxxx </名称>
</简历>
</xml>
[/Quote]

如果是生成xml来显示,那23楼的方法是最好的解决方法
qq6334984 2009-11-14
  • 打赏
  • 举报
回复
期待高高手
sharpe 2009-11-14
  • 打赏
  • 举报
回复
注释是编程时的文档,序列化是为了将数据保存和传输,你把注释序列化什么意义呢?
longhui666888 2009-11-14
  • 打赏
  • 举报
回复
实在不好意思,最近公司事多,好久没来了,也没再关注这个问题,希望有兴趣的朋友能够继续讨论下。
  • 打赏
  • 举报
回复
顶~
lovelan1748 2009-11-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 soaringbird 的回复:]
用自定义属性吧,例如:
[DescriptionAttribute("名称")]
public string Name

[/Quote]
这个得顶
longhui666888 2009-11-14
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 sharpe 的回复:]
注释是编程时的文档,序列化是为了将数据保存和传输,你把注释序列化什么意义呢?
[/Quote]
如果是一个自定义的配置文件的话,把注释写到XML文件里,以后手动修改XML文件时不就可以看到该项的意义了么
lzhdim 2009-10-21
  • 打赏
  • 举报
回复
注释不会被序列化的。序列化只针对对象的成员内容。
eyuannet 2009-10-21
  • 打赏
  • 举报
回复
[Serializable]
[XmlRootAttribute("简历")]
public class ss
{
[XmlElement("名称")]
public string Name { get; set; }
}
得到XML为
<xml>
<简历>
<名称>xxxx</名称>
</简历>
</xml>
soaringbird 2009-10-21
  • 打赏
  • 举报
回复
注释是属于源文件的,不会被编译。
属性是属于类的,不属于对象,所以也不会被序列化。
如果你是想得到一个文档,那么在编译参数中加一个选项就可以把注释编译到一个xml中。
grearo 2009-10-21
  • 打赏
  • 举报
回复


using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.IO;
/**
*
* 类名称:StreamByte (文件-数据流转换类)
* 类编号:C0102
* 描述: 文件-数据流之间相互转换

*/
namespace EHR_App.BasicClass
{
public class StreamByte
{
public static byte[] StreamToBytes(Stream stream)
{
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
// 设置当前流的位置为流的开始
stream.Seek(0, SeekOrigin.Begin);
return bytes;
}
/// <summary>
/// 将 byte[] 转成 Stream
/// </summary>
public static Stream BytesToStream(byte[] bytes)
{
Stream stream = new MemoryStream(bytes);
return stream;
}

/* - - - - - - - - - - - - - - - - - - - - - - - -
* Stream 和 文件之间的转换
* - - - - - - - - - - - - - - - - - - - - - - - */
/// <summary>
/// 将 Stream 写入文件
/// </summary>
public static void StreamToFile(Stream stream, string fileName)
{
// 把 Stream 转换成 byte[]
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
// 设置当前流的位置为流的开始
stream.Seek(0, SeekOrigin.Begin);
// 把 byte[] 写入文件
FileStream fs = new FileStream(fileName, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(bytes);
bw.Close();
fs.Close();
}
/// <summary>
/// 从文件读取 Stream
/// </summary>
public static Stream FileToStream(string fileName)
{
// 打开文件
FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
// 读取文件的 byte[]
byte[] bytes = new byte[fileStream.Length];
fileStream.Read(bytes, 0, bytes.Length);
fileStream.Close();
// 把 byte[] 转换成 Stream
Stream stream = new MemoryStream(bytes);
return stream;
}


internal static void FileToStream(string sql, System.Data.SqlClient.SqlParameter sqlParameter)
{
throw new Exception("The method or operation is not implemented.");
}
}
}
24K純帥 2009-10-21
  • 打赏
  • 举报
回复
学习。。
oneatree 2009-10-21
  • 打赏
  • 举报
回复
mark
SimpleM 2009-10-21
  • 打赏
  • 举报
回复
更正一下,不是用文件流序列化,是用二进制流的序列化方法
我给出代码吧

//保存集合到本地文件..序列化。。
FileStream fs = new FileStream("xmlInformation.txt", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, list);
fs.Close();

}
/////下面是读取本地文件信息代码
FileStream fs = new FileStream("xmlInformation.txt", FileMode.Open);
//读取信息时候需要转换类型。。你的存入的是什么类型读取接收时候就用什么类型转换
list = (List<Information>)bf.Deserialize(fs);
fs.Close();
SimpleM 2009-10-21
  • 打赏
  • 举报
回复
以下为序列化一般性流程:
1.在每个你要序列化的类加上[Serializable](包括其子类)
2.然后使用二进制流把对象转换成二进制
3.使用文件流序列化
——————————————————————————————
反序列化:
1.使用反序列化方法读取配置文件
2.使用与文件中的对象类型相匹配的对象去接收
kennie_190602169 2009-10-21
  • 打赏
  • 举报
回复
ding
加载更多回复(16)

110,500

社区成员

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

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

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