首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IXmlSerializable和XmlRootAttribute

IXmlSerializable和XmlRootAttribute
EN

Stack Overflow用户
提问于 2012-10-08 18:34:02
回答 1查看 897关注 0票数 1

我对xml序列化有一个奇怪的要求。

请参考以下C#代码(由于变量'rootName‘超出范围,因此无法编译)。我的意图是让我的类GeneralData成为“general”。这意味着可以根据类构造函数的输入参数将该类序列化为具有不同根元素的不同XML字符串。

代码语言:javascript
复制
[XmlRoot(ElementName = rootName)]
public class GeneralData : Dictionary<String, Object>, IXmlSerializable
{
    public string rootName;
    public GeneralData(string rootName)
    {
        this.rootName = rootName;
    }

    public System.Xml.Schema.XmlSchema GetSchema()
    {
        throw new NotImplementedException();
    }

    public void ReadXml(System.Xml.XmlReader reader)
    {
        throw new NotImplementedException();
    }

    public void WriteXml(System.Xml.XmlWriter writer)
    {
        foreach (var key in Keys)
        {
            var value = base[key];
            writer.WriteElementString(key, value.ToString());
        }
    }
}

有人能帮我完成这项任务吗?也许是以一种完全不同的方式?提前感谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-08 18:39:34

IXmlSerializable无法控制根元素。所以,你不能真的这么做。最接近的做法是将new XmlSerializer(...)与重载一起使用,该重载允许您在运行时(到构造函数中)指定根名称,但您应该小心:XmlSerializer的非平凡构造函数不使用内置的序列化程序缓存,这意味着:您可以最终为每个new XmlSerializer(...)创建一个新程序集,并且永远不会卸载程序集。如果不为序列化程序实例添加自己的缓存层,这可能会导致内存泄漏问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12779940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档