我正在学习ServiceStack.Text库,因为它具有一些最好的特性。我正在尝试将XML反序列化为我的DTO之一,如下所示:
C# 代码:[相关代码与控制台应用程序在这里]
class Program
{
static void Main(string[] args)
{
string str = "http://static.cricinfo.com/rss/livescores.xml";
WebClient w = new WebClient();
string xml = w.DownloadString(str);
Response rss = xml.FromXml<Response>();
foreach (var item in rss.rss.Channel.item)
{
Console.WriteLine(item.title);
}
Console.Read();
}
}
您可以查看程序中提供的
str
的XML文件。我已经准备好了用于反序列化的DTO,它们如下所示:public class Response
{
public RSS rss { get; set; }
}
public class RSS
{
public string Version { get; set; }
public ChannelClass Channel { get; set; }
}
public class ChannelClass
{
public string title { get; set; }
public string ttl { get; set; }
public string description { get; set; }
public string link { get; set; }
public string copyright { get; set; }
public string language { get; set; }
public string pubDate { get; set; }
public List<ItemClass> item { get; set; }
}
public class ItemClass
{
public string title { get; set; }
public string link { get; set; }
public string description { get; set; }
public string guid { get; set; }
}
当我运行程序时,会出现如下异常:
Element
和namespace
,我进行了以下的解决方法:我在我的
Response
类上放置了DataContractAttribute
,如下所示:[DataContract(Namespace = "")]
public class Response
{
public RSS rss { get; set; }
}
我在反序列化之前通过添加以下两行代码将Element
名称更改如下:
//To change rss Element to Response as in Exception
xml = xml.Replace("<rss version=\"2.0\">","<Response>");
//For closing tag
xml = xml.Replace("</rss>","</Response>");
但是,在foreach循环中,由于反序列化的rss
对象为null
,它会抛出另一个异常。那么,我应该如何使用Servicestack.Text
适当地对其进行反序列化呢?
注意:
我知道如何使用其他库进行反序列化,我想只使用ServiceStack来完成它。
servicestack
来完成这个任务吗? - Bhushan FirakeFromXml<>
——它不过是new DataContractSerializer(typeof(T)).ReadObject(reader)
。所以如果你已经在使用ServiceStack,那么拥有它是很好的,但它并不是一个关键的功能。 - Eamon Nerbonne