属性:获取:设置:序列化为XML

Property: Get: Set: Serialize to XML

我有一个 class 定义在其 get 方法中自动递增 属性。我正在尝试将此对象序列化为 XML,但未打印自动递增的 属性。感谢任何帮助。

public class Program
{
    public static void Main()
    {   
        
        MyClass _myClass = new MyClass();
        string transactionXML = string.Empty;
        Console.WriteLine("Current ID: " + _myClass.ID);
        System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(typeof(MyClass));
                System.IO.StringWriter _sw = new System.IO.StringWriter();
                System.Xml.XmlWriter writer = System.Xml.XmlWriter.Create(_sw);
                xmlSerializer.Serialize(writer, _myClass);
                transactionXML = _sw.ToString();
        Console.WriteLine("XML:\n" + transactionXML);
    }
    
     [Serializable]
    public class MyClass
    {
        long last_id = 0;
        public string ID{get { return System.Threading.Interlocked.Increment(ref last_id ).ToString("D6"); }}

    }
}

当我尝试 运行 时,它 运行 没有错误,但没有在 XML 中打印 ID。

您需要使用 setter 扩展您的“MyClass”ID,如下所示:

[Serializable]
public class MyClass
{
    long last_id = 0;
    public string ID { get { return System.Threading.Interlocked.Increment(ref last_id).ToString("D6"); } set { } }
}

XMLSerializer 的限制 - 没有 setter 的属性无法序列化。

但是你可以使用DataContractSerializer序列化私有setter属性-

[DataMember]
public string Id
{
    get
    {
         return Guid.NewGuid().ToString();
    }
    private set {}
}