gpt4 book ai didi

c# - 部分 xml 序列化/反序列化

转载 作者:太空宇宙 更新时间:2023-11-03 11:51:30 24 4
gpt4 key购买 nike

是否有可能从字符串中部分(反)/序列化一个对象?

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);
}
}

关于c# - 部分 xml 序列化/反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2030969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com