部分 xml 序列化/反序列化

2024-01-21

是否可以将对象部分(de)/序列化为字符串?

class Foo
{
      Bar Bar{get;set;}
      string XmlJunkAsString{get;set;}
}

所以最终,我们希望下面的字符串能够工作......

<Foo><Bar></Bar><XmlJunkAsString><xml><that/><will/><not/><be/><parsed/></xml></XmlJunkAsString></Foo>

最终我们可以找到 Foo.XmlJunkAsString 的内容来包含该字符串

<xml><that/><will/><not/><be/><parsed/></xml>

反之亦然,当序列化 Foo 的这个特定实例时,会生成上面的 xml。

可能的?


我本来希望[XmlText]会起作用,但它似乎被逃脱了;你可以实施IXmlSerializable,但这非常棘手。下面的代码很难看,但给出了正确的结果(尽管您可能会得到一些 xml 空白差异)

using System;
using System.ComponentModel;
using System.Xml;
using System.Xml.Serialization;
public class Bar { }
public class Foo
{
    public Bar Bar { get; set; }

    [XmlIgnore]
    public string XmlJunkAsString { get; set; }

    [XmlElement("XmlJunkAsString"), Browsable(false)]
    [EditorBrowsable(EditorBrowsableState.Never)]
    public XmlElement XmlJunkAsStringSerialized
    {
        get
        {
            string xml = XmlJunkAsString;
            if (string.IsNullOrEmpty(xml)) return null;
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xml);
            return doc.DocumentElement;
        }
        set
        {
            XmlJunkAsString = value == null ? null : value.OuterXml;
        }
    }
}
static class Program {
    static void Main()
    {
        var obj = new Foo
        {
            Bar = new Bar(),
            XmlJunkAsString = "<xml><that/><will/><not/><be/><parsed/></xml>"
        };
        var ser = new XmlSerializer(obj.GetType());
        ser.Serialize(Console.Out, obj);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

部分 xml 序列化/反序列化 的相关文章

随机推荐