将XML部分反序列化为Object
我有一些XML,我将其反序列化为业务对象。 我正在使用XmlSerializer.Deserialize来执行此操作。 但是,我希望XML中包含的一个XmlElement保留一个XElement。
它不能直接完成(使用XmlElementAttribute),因为XElement不是Serializable。 我还试图将该元素序列化为一个字符串(两步尝试获取一个XElement),但失败并出现错误:
意外的节点类型元素。 readelementstring方法只能在具有简单或空内容的元素上调用
知道如何做到这一点?
这是一个xml的例子和我想要的结果对象:
...
宾语:
public class Person { [XmlAttribute("Name")] public string Name {get; set;} ????? public XElement Hobbies {get; set;} [XmlElement("HomeAddress")] public Address HomeAddress {get; set;} }
尝试不起作用:
[XmlElement("Hobbies")] public XElement Hobbies {get; set;} [XmlElement("Hobbies")] public string Hobbies {get; set;}
为了避免实现像IXmlSerializable
这样的东西,你可能会做一些半隐藏的pass-thru XmlElement
属性。 但是,请注意,由于您只能拥有一个根XElement
值(而不是两个,根据您的示例),因此您不能完全按照自己的意愿XElement
; 你需要一个清单才能做到这一点……
using System; using System.ComponentModel; using System.Xml; using System.Xml.Linq; using System.Xml.Serialization; public class Person { [XmlAttribute("Name")] public string Name { get; set; } [XmlIgnore] public XElement Hobbies { get; set; } [XmlElement("Hobbies")] [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] public XmlElement HobbiesSerialized { get { XElement hobbies = Hobbies; if(hobbies == null) return null; XmlDocument doc = new XmlDocument(); doc.LoadXml(hobbies.ToString()); return doc.DocumentElement; } set { Hobbies = value == null ? null : XElement.Parse(value.OuterXml); } } [XmlElement("HomeAddress")] public Address HomeAddress { get; set; } } public class Address { } static class Progmam { static void Main() { var p = new Person { Hobbies = new XElement("xml", new XAttribute("hi","there")) }; var ser = new XmlSerializer(p.GetType()); ser.Serialize(Console.Out, p); } }
要完全控制(以及完全负责)如何生成XML,您可以让您的类实现System.Xml.Serialization.IXmlSerializable接口,并覆盖ReadXml和WriteXml。 我必须在使用字典类之前执行此操作 – 确保彻底测试,尤其是使用null属性,空字段等。
https://www.devx.com/dotnet/Article/29720
上述就是C#学习教程:将XML部分反序列化为Object分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/948995.html