c# - 反序列化 XML 文件属性
问题描述
我正在尝试反序列化以下 xml 文件:
<item>
<title>Title</title>
<link>https://blog.sitename.com/link</link> <comments>https://blog.sitename.com/link/#respond</comments>
<dc:creator><![CDATA[name]]></dc:creator>
<pubDate>Thu, 30 Apr 2020 18:59:06 +0000</pubDate>
<description><p>description...</p><p> continue</p></description>
<category><![CDATA[General News]]></category>
<media:content url="https://blog.gotproperty.co.za/wp-content/uploads/2020/04/image.jpg" medium="image" />
</item>
我的班级如下
[XmlRoot("item")]
public class item
{
public string title { get; set; }
public string link { get; set; }
public string comments{ get; set; }
[XmlElement("media:content")]
public Image Image { get; set; }
public string description { get; set; }
public string shortDescription
{
get
{
var decodeHtml = HttpUtility.HtmlDecode(description);
var result = decodeHtml.Substring(decodeHtml.IndexOf('>') +1, decodeHtml.IndexOf("</") - decodeHtml.IndexOf('>') -1);
return result;
}
}
}
public class Image
{
[XmlAttribute("url")]
public string url { get; set; }
[XmlAttribute("medium")]
public string medium { get; set; }
}
除了使用 Image 类的“media:content”元素外,所有内容都在解析,其中 url 和 media 定义为 XmlAttributes。
解决方案
<media:content>
不是 xml 元素名称;也就是说<content>
,但是在名称空间中,无论您有别名xmlns:media
指的是什么;所以如果你有xmlns:media="http://foo/bar"
,那么这是:
[XmlElement("content", Namespace = "http://foo/bar")]
public Image Image { get; set; }
明确地说:如果你有xmlns:media="http://foo/bar"
,那么:<media:content>
类似于<content xmlns="http://foo/bar">
,除了命名空间"http://foo/bar"
不被子元素继承。
推荐阅读
- python-3.x - Pandas,连接列的值。
- c# - ServiceStack api/auth/credentials 在前端迁移时返回 404
- reactjs - 如何在 Redux-Bees 中使用 websockets
- semantic-ui - 如何使我的网站在语义 UI 中固定宽度?
- javascript - 在对象数组中获取单个键和单个值的更简单方法?
- nuxt.js - Nuxt vuex 商店没有收到 axios 请求
- javascript - 从 firebase 函数返回
- javascript - 淡入淡出背景将文字向上移动
- scala - 在 Spark scala 中,如何检查数据帧中的相邻行之间
- vba - 日期老化计算器