带有C#信封的对象的XML序列化

带有C#信封的对象的XML序列化,第1张

概述我需要在C#中将对象序列化为 XML.物体应包裹在信封中.为此,我创建了以下Envelope类: [XmlInclude(typeof(Person))]public class Envelope{ public string SomeValue { get; set; } public object WrappedObject { get; set; }} 我使用以下代码序 我需要在C#中将对象序列化为 XML.物体应包裹在信封中.为此,我创建了以下Envelope类:
[Xmlinclude(typeof(Person))]public class Envelope{    public string SomeValue { get; set; }    public object Wrappedobject { get; set; }}

我使用以下代码序列化类:

string filename = ...;XmlSerializer serializer = new XmlSerializer(typeof(Envelope));TextWriter textWriter = new StreamWriter(filename);try{    serializer.Serialize(textWriter,<instance of envelope>);}finally{    textWriter.Close();}

当我将一个Person类型的对象分配给Wrappedobject时,我得到以下XML:

<Envelope>    <SomeValue>...</SomeValue>    <Wrappedobject xsi:type="Person">        ....    </Wrappedobject></Envelope>

问题是,我希望包装对象的标签以我传入的实际类命名.例如,如果我将Person的实例分配给Wrappedobject,我希望XML看起来如下所示:

<Envelope>    <SomeValue>...</SomeValue>    <Person>        ....    </Person></Envelope>

如果我指定一个动物实例,我想得到

<Envelope>    <SomeValue>...</SomeValue>    <Animal>        ....    </Animal></Envelope>

我怎么做到这一点?

编辑

实际上我已经简化了我的例子……被包裹的对象实际上又被包裹了:

public class Envelope{    public string SomeValue { get; set; }    public Wrapper Wrap { get; set; }}[Xmlinclude(typeof(Person))]public class Wrapper{    public object Wrappedobject { get; set; }}

如何使用属性覆盖来处理此问题?

解决方法 你需要使用 attribute override.我正在大量使用它,因为我做了很多自定义序列化.

这是一个粗略的未经测试的片段,但应指向正确的方向:

XmlAttributes attributes = new XmlAttributes();XmlAttributeOverrIDes xmlAttributeOverrIDes = new XmlAttributeOverrIDes();attributes.XmlElements.Add(new XmlElementAttribute("Person",t));xmlAttributeOverrIDes.Add(typeof(Person),"Wrappedobject",attributes);XmlSerializer myserialiser = new XmlSerializer(typeof(Envelope),xmlAttributeOverrIDes);
总结

以上是内存溢出为你收集整理的带有C#信封的对象的XML序列化全部内容,希望文章能够帮你解决带有C#信封的对象的XML序列化所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1246022.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存