请教一个比较困惑的问题,对象序列化

allen_21229 2010-10-07 09:09:11
现在是需要把一个对象序列化成xml,对象里面有很多数据类型的属性, 包括string,datetime,int,double数据类型.

现在的意图是:
这些值类型可以允许为null,如果是null的话,序列化后的xml中不显示这个属性(xml中没有这个node).

我知道XmlElementAttribute里面有一个IsNullable = true,只对引用类型有效.我这里的属性都是值类型,请大家指点.
...全文
209 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
troy2012 2010-10-07
  • 打赏
  • 举报
回复
幫頂,XML讀寫的問題.
无涯大者 2010-10-07
  • 打赏
  • 举报
回复
不太懂,帮忙顶下~~
wuyq11 2010-10-07
  • 打赏
  • 举报
回复
兔子-顾问 2010-10-07
  • 打赏
  • 举报
回复
序列化反序列化 (binary/xml) - 常用代码搜集,方便复用
http://blog.csdn.net/wuyazhe/archive/2010/07/30/5775666.aspx
bloodish 2010-10-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 allen_21229 的回复:]
再问一个问题, 在不实现IXmlSerializable下,有简单的方法自定义的序列化对象的属性? 比如datetime类型,输出:2010-10-10 10:00:00
[/Quote]
可以看一下这篇文章
XmlSerializer : Format DateTime String

其他类型也可以照此方式进行变通,但个人不建议你这么去做,有点画蛇添足.
最后你还是会觉得实现IXmlSerialzable方便
allen_21229 2010-10-07
  • 打赏
  • 举报
回复
bloodish, 不好意思呀, 刚才看倒你说的方法 感觉蛮其怪的,后来仔细查了一下资料,原来ShouldSerialize方法是.net2.0的新功能, 平时很少使用,谢谢你,
再问一个问题, 在不实现IXmlSerializable下,有简单的方法自定义的序列化对象的属性? 比如datetime类型,输出:2010-10-10 10:00:00
bloodish 2010-10-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 allen_21229 的回复:]
我使用的是XmlSerializer序列化的呀?
[/Quote]

就是应用到XmlSerializer,给你例子了,为什么不自己试试呢?


MyClass m = new MyClass();
XmlSerializer xs = new XmlSerializer(typeof(MyClass));
using (FileStream fs = new FileStream(@"c:\1.xml", FileMode.Create, FileAccess.Write))
{
xs.Serialize(fs, m);
}
allen_21229 2010-10-07
  • 打赏
  • 举报
回复
我使用的是XmlSerializer序列化的呀?
bloodish 2010-10-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 allen_21229 的回复:]
bloodish
增加的方法 怎么控制序列化?
[/Quote]
public bool ShouldSerializeIntValue() { return IntValue != null && IntValue.HasValue; }

ShouldSerializeIntValue返回一个Bool值,如果返回True则序列化该属性,否则不做序列化,
至于返回True还是False,你自己可以在函数体里面写判断逻辑.
例子的判断就是IntValue != null && IntValue.HasValue才会将IntValue这一属性进行序列化.
allen_21229 2010-10-07
  • 打赏
  • 举报
回复
bloodish
增加的方法 怎么控制序列化?
bloodish 2010-10-07
  • 打赏
  • 举报
回复
1)使用可空值类型,nullable<int> 或者 int?
2)对应的序列化字段,增加一个方法ShouldSerialize+PropName,判断是否需要序列化的条件

例子

public class MyClass 
{
public int? IntValue { get; set; }
public bool ShouldSerializeIntValue() { return IntValue != null && IntValue.HasValue; }

public DateTime? DateTimeValue { get; set; }
public bool ShouldSerializeDateTimeValue() { return DateTimeValue != null && DateTimeValue.HasValue; }
}

110,553

社区成员

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

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

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