[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序列化所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)