为了账号安全,请及时绑定邮箱和手机立即绑定

序列化私人成员数据

序列化私人成员数据

慕雪6442864 2019-10-09 16:23:41
我正在尝试将对象序列化为具有许多属性的XML,其中一些属性为只读。public Guid Id { get; private set; }我已经标记了[Serializable]类,并且实现了ISerializable接口。下面是我用来序列化对象的代码。public void SaveMyObject(MyObject obj){    XmlSerializer serializer = new XmlSerializer(typeof(MyObject));    TextWriter tw = new StreamWriter(_location);    serializer.Serialize(tw, obj);    tw.Close();}不幸的是,它落在此消息的第一行。未处理InvalidOperationException:无法生成临时类(结果= 1)。错误CS0200:无法将属性或索引器'MyObject.Id'分配给它-只读如果我将Id属性设置为public,则效果很好。有人可以告诉我我是否正在做某事,或者至少可以做某件事?
查看完整描述

3 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

您可以使用System.Runtime.Serialization.NetDataContractSerializer。它功能更强大,并修复了经典Xml Serializer的某些问题。


请注意,此属性有不同的属性。


[DataContract]

public class X

{

  [DataMember]

  public Guid Id { get; private set; }

}



NetDataContractSerializer serializer = new NetDataContractSerializer();

TextWriter tw = new StreamWriter(_location);

serializer.Serialize(tw, obj);

编辑:


根据Marc的评论进行更新:您可能应该System.Runtime.Serialization.DataContractSerializer在案例中使用以获得清晰的XML。其余代码相同。


查看完整回答
反对 回复 2019-10-09
?
SMILET

TA贡献1796条经验 获得超4个赞

只读字段不会使用进行序列化XmlSerializer,这是由于readonly关键字的性质


从MSDN:


该只读关键字是修改,你可以在字段中使用。当字段声明包含只读修饰符时,对由该声明引入的字段的赋值只能作为声明的一部分或在同一类的构造函数中进行。


所以...您几乎需要在默认构造函数中设置字段值...


查看完整回答
反对 回复 2019-10-09
  • 3 回答
  • 0 关注
  • 359 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信