当前位置: 首页 > 编程语言 > C#

使用LINQ to XML将xml解析为类对象分享

时间:2023-04-10 17:36:38 C#

C#学习教程:使用LINQtoXML解析xml为类对象放;}公共字符串ID{得到;放;}publicdoubleMolarMass{get;放;我可以使用LINQ查询将此组件解析为对象吗?这个怎么样?我应该以IEnumerable结束,对吗?编辑更多点......您可以使用以下内容:XDocumentdoc=XDocument.Parse(xml);IEnumerableresult=fromcindoc.Descendants("Component")选择新的ChemieComponent(){Name=(string)c.Attribute("name"),Id=(string)c.Attribute("id"),MolarMass=(double)c.Attribute("摩尔质量")};编辑也可以使用LinqtoXml访问嵌套元素:publicclass}publicintPressure{get;放;}公共IEnumerable分数{得到;放;}}publicclassFraction{publicstringId{get;放;}publicdoubleValue{get;放;}}staticvoidMain(){stringxml=@"";XDocumentdoc=XDocument.Parse(xml);IEnumerableresult=fromcindoc.Descendants("Point")selectnewPoint(){Name=(string)c.Attribute("name"),Pressure=(int)c.Attribute("pressure"),Fractions=fromfinc.Descendants("Fraction")选择新分数(){Id=(string)f.Attribute("id"),Value=(double)f.Attribute("value"),}};我意识到这是一篇旧文章,但我最近一直在阅读XML文章,我并不热衷于LinqtoXML——它的可读性不是很好,依赖于“魔术字符串”,并且如果XML模式发生变化则需要更改代码。对于任何感兴趣的人,我正在使用XmlSerializer类将XML反序列化为对象。将反序列化代码放入通用辅助方法中,然后将一行代码反序列化为对象图:-使用System.IO;使用System.Xml.Serialization;类程序{staticvoidMain(string[]args){varxml=@"";varmodel=DeserializeObject(xml);}privatestaticTDeserializeObject(stringxml){varserializer=newXmlSerializer(typeof(T));使用(vartr=newStringReader(xml)){return(T)serializer.Deserialize(tr);}}}publicclassModel{[XmlArrayItem("Point")]publicPoint[]Points{get;放;}}publicclassPoint{[XmlAttribute(AttributeName="name")]publicstringName{get;放;}[XmlAttribute(AttributeName="pressure")]publicintPressure{get;放;}[XmlArrayItem("Fraction")]publicFraction[]Fractions{get;放;}}publicclassFraction{[XmlAttribute(AttributeName="id")]publicstringId{get;放;}[XmlAttribute(AttributeName="value")]publicdoubleValue{get;放;需要注意的几点:-这个解决方案显然依赖于用XML属性装饰域模型,您可能会接受也可能不会接受。此解决方案还依赖于XML中外部元素的存在,如果根元素是数组(在此示例中是数组),则该方法将不起作用。无法指定IEnumerable(如OP所述);您可以使用数组或罗列以上就是C#学习教程:使用LINQtoXML将xml解析为类对象,全部内容分享给大家,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注顶一下,如涉及侵权,请点右联系管理员删除,如需转载请注明出处: