如何使用XmlSerializer插入xml字符串

Hen*_*gyi 9 c# xml serialization

我已经定义了以下类:

public class Root
{
    public string Name;
    public string XmlString;
}
Run Code Online (Sandbox Code Playgroud)

并创建了一个对象:

Root t = new Root 
         {  Name = "Test", 
            XmlString = "<Foo>bar</Foo>" 
         };
Run Code Online (Sandbox Code Playgroud)

当我使用XmlSerializer类来序列化这个对象时,它将返回xml:

<Root>
  <Name>Test</Name>
  <XmlString>&lt;Foo&gt;bar&lt;/Foo&gt;</XmlString>
</Root>
Run Code Online (Sandbox Code Playgroud)

我如何使它不编码我的XmlString内容,以便我可以获得序列化的xml

<XmlString><Foo>bar</Foo></XmlString>
Run Code Online (Sandbox Code Playgroud)

谢谢,伊恩

Cam*_*and 13

您可以将自定义序列化限制为仅需要特别注意的元素.

public class Root
{
    public string Name;

    [XmlIgnore]
    public string XmlString
    {
        get
        {
            if (SerializedXmlString == null)
                return "";
            return SerializedXmlString.Value;
        }
        set
        {
            if (SerializedXmlString == null)
                SerializedXmlString = new RawString();
            SerializedXmlString.Value = value;
        }
    }

    [XmlElement("XmlString")]
    [Browsable(false)]
    [EditorBrowsable(EditorBrowsableState.Never)]
    public RawString SerializedXmlString;
}

public class RawString : IXmlSerializable
{
    public string Value { get; set; }

    public XmlSchema GetSchema()
    {
        return null;
    }

    public void ReadXml(System.Xml.XmlReader reader)
    {
        this.Value = reader.ReadInnerXml();
    }

    public void WriteXml(System.Xml.XmlWriter writer)
    {
        writer.WriteRaw(this.Value);
    }
}
Run Code Online (Sandbox Code Playgroud)


gar*_*thm 0

如果这是可能的,我会感到非常惊讶。假设您可以这样做 - 如果属性中的 XML 格式错误会发生什么 - 一切都会崩溃。

我希望您需要为这种情况编写自己的序列化,或者使 XmlString 字段成为包含 foo 字段的结构。