C# 反序列化restful uri
我正在尝试反序列化位于的RESTURI并不断得到错误(XML文档(1,1)中有一个错误)。插入浏览器,您可以看到结果 我有一节课C# 反序列化restful uri,c#,rest,serialization,service,C#,Rest,Serialization,Service,我正在尝试反序列化位于的RESTURI并不断得到错误(XML文档(1,1)中有一个错误)。插入浏览器,您可以看到结果 我有一节课 public class Country { public string CountryName {get;set;} public string CountryCode {get;set;} } 我的控制台应用程序中的方法如下: static void DeserializeTheXML() { XmlRootAt
public class Country
{
public string CountryName {get;set;}
public string CountryCode {get;set;}
}
我的控制台应用程序中的方法如下:
static void DeserializeTheXML()
{
XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "countryName";
xRoot.IsNullable = true;
XmlSerializer ser = new XmlSerializer(typeof(Country), xRoot);
XmlReader xRdr = XmlReader.Create(new StringReader("http://ws.geonames.org/countryInfo?lang=it&country=DE"));
Country tvd = new Country();
tvd = (Country)ser.Deserialize(xRdr);
Console.WriteLine("Country Name = " + tvd.CountryName);
Console.ReadKey();
}
关于如何反序列化这个rest服务有什么想法吗?感谢..要使序列化成功工作,您需要使用适当的序列化属性装饰对象,或者使用XmlAttributeOverrides构造函数。另外,不要忘记XML是区分大小写的,您的对象必须反映您正在反序列化的XML结构:
public class GeoNames
{
[XmlElement("country")]
public Country[] Countries { get; set; }
}
public class Country
{
[XmlElement("countryName")]
public string CountryName { get; set; }
[XmlElement("countryCode")]
public string CountryCode { get; set; }
}
class Program
{
static void Main()
{
var url = "http://ws.geonames.org/countryInfo?lang=it&country=DE";
var serializer = new XmlSerializer(typeof(GeoNames), new XmlRootAttribute("geonames"));
using (var client = new WebClient())
using (var stream = client.OpenRead(url))
{
var geoNames = (GeoNames)serializer.Deserialize(stream);
foreach (var country in geoNames.Countries)
{
Console.WriteLine(
"code: {0}, name: {1}",
country.CountryCode,
country.CountryName
);
}
}
}
}
除了Darin的回答:您的字符串读取器不从web服务获取XML,而只是将URL作为字符串包含,这将导致XML反序列化错误。您知道如何从上面的示例中删除名称空间吗?在另一个rest uri上尝试了此操作,它包含一个命名空间。谢谢..-“>-0 BBQ Smith bbqsmith.com请不要使用“评论”部分发布代码片段。它完全不可读。请更新您的原始问题或启动一个新的线程,据我所知,这与您最初在此处提出的结构非常不同。