小编典典

序列化私人成员数据

c#

我正在尝试将对象序列化为具有许多属性的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,则效果很好。有人可以告诉我我是否正在做某事,或者至少可以做某件事?


阅读 238

收藏
2020-05-19

共1个答案

小编典典

您可以使用DataContractSerializer(但请注意,您不能使用xml属性-只能使用xml元素):

using System;
using System.Runtime.Serialization;
using System.Xml;
[DataContract]
class MyObject {
    public MyObject(Guid id) { this.id = id; }
    [DataMember(Name="Id")]
    private Guid id;
    public Guid Id { get {return id;}}
}
static class Program {
    static void Main() {
        var ser = new DataContractSerializer(typeof(MyObject));
        var obj = new MyObject(Guid.NewGuid());
        using(XmlWriter xw = XmlWriter.Create(Console.Out)) {
            ser.WriteObject(xw, obj);
        }
    }
}

另外,您也可以IXmlSerializable自己实施和执行所有操作-但这XmlSerializer至少可以与一起使用。

2020-05-19