簡體   English   中英

將類的ToString()序列化為XmlElement

[英]Serialize class's ToString() value as XmlElement

在C#中,我正在嘗試將ClassA序列化為XML:

[Serializable]
public ClassA 
{
    [XmlElement]
    public string PropertyA { get; set; } // works fine

    [XmlElement]
    public ClassB MyClassB { get; set; }
}

[Serializable]
public ClassB
{
    private string _value;

    public override string ToString()
    {
        return _value;
    }
}

不幸的是,序列化的結果是:

<PropertyA>Value</PropertyA>
<ClassB />

相反,我希望它是:

<PropertyA>Value</PropertyA>
<ClassB>Test</ClassB>

...假設_value == "Test" 我該怎么做呢? 是否必須在ClassB中為_value提供公共財產? 謝謝!

更新:

通過在ClassB中實現IXmlSerializable接口( 此處顯示為 #12),生成以下XML:

<PropertyA>Value</PropertyA>
<ClassB>
    <Value>Test</Value>
</ClassB>

這個解決方案幾乎可以接受,但擺脫標簽會很好。 有任何想法嗎?

正如您所指出的,唯一的方法是實現IXmlSerializable接口。

public class ClassB : IXmlSerializable
{
    private string _value;

    public string Value {
        get { return _value; }
        set { _value = value; }
    }

    public override string ToString()
    {
        return _value;
    }

    #region IXmlSerializable Members

    public System.Xml.Schema.XmlSchema GetSchema()
    {
        return null;
    }

    public void ReadXml(System.Xml.XmlReader reader)
    {
        _value = reader.ReadString();
    }

    public void WriteXml(System.Xml.XmlWriter writer)
    {
        writer.WriteString(_value);
    }

    #endregion
}

序列化以下實例......

ClassB classB = new ClassB() { Value = "this class's value" };

將返回以下xml:

<?xml version="1.0" encoding="utf-16"?><ClassB>this class's value</ClassB>

您可能需要進行一些驗證,以便編碼xml標簽等。

你已經回答了自己。 如果你派生自IXmlSerializable,你可以改變方法來完全(希望)做你想要的:

    public void WriteXml(System.Xml.XmlWriter writer)
    {
         writer.WriteElementString("ClassB",_value);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM