[英]How do I deserialize XML attribute?
我對 C# 相當陌生,所以我希望你們能在這里指導我。 我有以下 XML,它應該轉換為帶有代碼、描述和 lang 的對象,但我真的很難獲得 XML 的 'lang' 屬性值。
目前它只返回 'code' 和 'description' 的值,而 'lang' 返回 null。
<?xml version="1.0" encoding="UTF-8"?>
<statisticgroup>
<code>2049</code>
<description lang="en-GB">2049</description>
</statisticgroup>
[Serializable]
public class XmlStatisticsModel
{
[XmlElement ( "code" )]
public string Code { get; set; }
[XmlElement ( "description" )]
public string Description { get; set; }
[XmlAttribute ( "lang" )]
public string Lang { get; set; }
}
您無法以這種方式讀取語言屬性,因為它不是<statisticgroup>
節點(代表您的類)的屬性,而是<Description>
節點的屬性。 將 Description 更改為一個類並在那里指定屬性,如下所示:
[Serializable]
public class Description
{
[XmlText]
public string Value { get; set; }
[XmlAttribute("lang")]
public string Lang { get; set; }
}
[Serializable]
[XmlRoot("statisticgroup")]
public class XmlStatisticsModel
{
[XmlElement("code")]
public string Code { get; set; }
[XmlElement("description")]
public Description Description { get; set; }
}
static void Main(string[] args)
{
string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<statisticgroup>
<code>2049</code>
<description lang=""en-GB"">2049</description>
</statisticgroup>
";
StringReader sr = new StringReader(xml);
XmlStatisticsModel statisticsModel = (XmlStatisticsModel)new XmlSerializer(typeof(XmlStatisticsModel)).Deserialize(sr);
Console.WriteLine("Description: {0} (lang: {1})", statisticsModel.Description.Value, statisticsModel.Description.Lang);
}
為您的 XML 架構定義一個 XSD,並讓 Microsoft 的 xsd.exe 為您生成類定義。
為了獲得 XSD 的良好起點,您還可以從 XML 生成 XSD。 但是在自動生成的 XSD 上還有一些工作要做。
試試這個代碼:
class Program
{
static void Main(string[] args)
{
string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<statisticgroup>
<code>2049</code>
<description lang=""en-GB"">2049</description>
</statisticgroup>
";
var sr = new StringReader(xml);
var deserialized = new XmlSerializer(typeof(Statisticgroup)).Deserialize(sr);
}
}
[XmlRoot(ElementName = "description")]
public class Description
{
[XmlAttribute(AttributeName = "lang")]
public string Lang { get; set; }
[XmlText]
public string Text { get; set; }
}
[XmlRoot(ElementName = "statisticgroup")]
public class Statisticgroup
{
[XmlElement(ElementName = "code")]
public string Code { get; set; }
[XmlElement(ElementName = "description")]
public Description Description { get; set; }
}
結果是:
在這種情況下,您將 Description 定義為字符串,但在這種情況下,您必須將其定義為自己的元素類型:
[XmlRoot(ElementName="description")]
public class Description
{
[XmlAttribute ( "lang" )]
public string Lang { get; set; }
[XmlText]
public string Text { get; set; }
}
然后在主對象中將其定義為:
[XmlElement(ElementName="description")]
public Description Description { get; set; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.