【发布时间】:2013-07-31 10:48:51
【问题描述】:
我正在开发一个使用 ImgUr.com API 的项目 我请求一张图片或相册,然后返回 XML。
我正在使用序列化程序将 XML 反序列化回对象。所以我为图像和专辑都做了类。
但棘手的部分来了…… 专辑看起来像这样:
<data success="1" result="200">
<id>x</id>
...
<images>
<item>
<id>x</id>
<link>http://linktoimage.jpg</link>
...
</item>
<item>
<id>x</id>
<link>http://linktoimage.jpg</link>
...
</item>
...
</images>
</data>
所以实际图像的根元素是'item'。
但是当我通过 API 请求实际图像时,我得到以下信息:
<data success="1" result="200">
<id>x</id>
<link>http://linktoimage.jpg</link>
...
</data>
现在,根元素是“数据”。
所以我现在的解决方案是两个不同的类。一个是[XMLRootElement(Elementname = "item")],一个是[XMLRootElement(Elementname = "data")],但我想应该有一个更简单的解决方案?
编辑: 应 Henk 的要求,我的接收方 我用于接收 XML 的代码:
var request = WebRequest.Create(String.Format("{0}image/{1}.xml", Settings.Default.ImgUrBaseUrl, albumId));
request.Headers.Add("Authorization", "Client-ID " + Settings.Default.ImgUrClientID);
var response = request.GetResponse();
var imageStream = response.GetResponseStream();
if (imageStream == null) return "";
var serilizer = new XmlSerializer(typeof(ImgUrSingleImage));
var result = serilizer.Deserialize(imageStream) as ImgUrSingleImage;
所以,我想我需要取出<data> 标签,并将剩余的xml 包装在一个新的<item> 标签中?
【问题讨论】:
-
看起来不太适合序列化程序的格式。您可以轻松地预处理 XML 以插入
<item>标记。 -
@HenkHolterman 您的意思是像将 xml 作为字符串读取,将
<data替换为<item,将</data>替换为</item>? -
我假设你有一个字符串,我更喜欢通过 XElement 进行突变。也许插入而不是替换标签,这取决于。
-
我通过 Streamreader 读取了 xml。我将不得不深入研究 XElement。
-
当您发布阅读/接收部分时,您可以获得一些帮助。
标签: c# web-services xml-parsing xml-serialization