如何使用 C# 中的属性反序列化 XML
How to deserialize an XML with attributes in C#
我有一个看起来类似于此的 XML 文件:
<data label="product data">
<price min="10" max="60">35</price>
</data>
我在 .Net Core 中使用 System.Xml.Serialization
。我正在尝试反序列化 XML。对于这样的常规 XML:
<data>
<price>35</price>
</data>
以下方法:
public T DeserializeXml<T>(string input)
{
var xmlSerializer = new System.Xml.Serialization.XmlSerializer(typeof(T));
using var stringReader = new StringReader(input);
var xmlReader = new XmlTextReader(stringReader);
return (T) xmlSerializer.Deserialize(xmlReader);
}
工作正常并将其解析为特定的 class 对象。但是当 XML 包含属性时,它无法正常工作,并且在尝试将其反序列化为它的对象时崩溃。
这是我的 class:
[XmlType("data")]
public class ProductInfo
{
[XmlElement(ElementName = "price")]
public string Price{ get; set; }
}
那么我如何检索具有属性的有效 XML 以及如何存储其属性值?不确定如何使用 System.Xml.Serialization
库。
通过查看 XML 模型应该看起来像
[XmlRoot(ElementName="price")]
public class Price {
[XmlAttribute(AttributeName="min")]
public string Min { get; set; }
[XmlAttribute(AttributeName="max")]
public string Max { get; set; }
[XmlText]
public string Text { get; set; }
}
[XmlRoot(ElementName="data")]
public class Data {
[XmlElement(ElementName="price")]
public Price Price { get; set; }
[XmlAttribute(AttributeName="label")]
public string Label { get; set; }
}
我有一个看起来类似于此的 XML 文件:
<data label="product data">
<price min="10" max="60">35</price>
</data>
我在 .Net Core 中使用 System.Xml.Serialization
。我正在尝试反序列化 XML。对于这样的常规 XML:
<data>
<price>35</price>
</data>
以下方法:
public T DeserializeXml<T>(string input)
{
var xmlSerializer = new System.Xml.Serialization.XmlSerializer(typeof(T));
using var stringReader = new StringReader(input);
var xmlReader = new XmlTextReader(stringReader);
return (T) xmlSerializer.Deserialize(xmlReader);
}
工作正常并将其解析为特定的 class 对象。但是当 XML 包含属性时,它无法正常工作,并且在尝试将其反序列化为它的对象时崩溃。
这是我的 class:
[XmlType("data")]
public class ProductInfo
{
[XmlElement(ElementName = "price")]
public string Price{ get; set; }
}
那么我如何检索具有属性的有效 XML 以及如何存储其属性值?不确定如何使用 System.Xml.Serialization
库。
通过查看 XML 模型应该看起来像
[XmlRoot(ElementName="price")]
public class Price {
[XmlAttribute(AttributeName="min")]
public string Min { get; set; }
[XmlAttribute(AttributeName="max")]
public string Max { get; set; }
[XmlText]
public string Text { get; set; }
}
[XmlRoot(ElementName="data")]
public class Data {
[XmlElement(ElementName="price")]
public Price Price { get; set; }
[XmlAttribute(AttributeName="label")]
public string Label { get; set; }
}