我有一个XML文件,当我使用XSD工具从XML创建一个类对象时,我收到一条消息说"一个名为' link'已经属于此DataTable:无法将嵌套表设置为相同的名称。
我想知道如何正确反序列化此XML文件,以便我可以在应用上显示数据。这个XML文件基本上只是Rss新闻源数据。
您可以在此处查看整个XML文件结构:https://github.com/karimo94/XMLDemo/blob/master/leaguenews.xml
答案 0 :(得分:0)
看看这个设计
DataSet ds = new DataSet();
XmlSerializer xmlSerializer = new XmlSerializer(typeof(DataSet));
FileStream readStream = new FileStream("leaguenews.xml", FileMode.Open);
ds = (DataSet)xmlSerializer.Deserialize(readStream);
readStream.Close();
dataGridView1.DataSource = ds.Tables[0];
答案 1 :(得分:0)
尝试以下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Data;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test1.xml";
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("Title", typeof(string));
dt.Columns.Add("Description", typeof(string));
dt.Columns.Add("Link", typeof(string));
dt.Columns.Add("IsPermaLink", typeof(Boolean));
dt.Columns.Add("GUID", typeof(string));
dt.Columns.Add("Publish Date", typeof(DateTime));
dt.Columns.Add("Width", typeof(int));
dt.Columns.Add("Height", typeof(int));
dt.Columns.Add("URL", typeof(string));
XDocument doc = XDocument.Load(FILENAME); //or uri
List<XElement> items = doc.Descendants("item").ToList();
foreach (XElement item in items)
{
dt.Rows.Add(new object[] {
(string)item.Element("title"),
(string)item.Element("description"),
(string)item.Element("link"),
(Boolean)item.Element("guid").Attribute("isPermaLink"),
(string)item.Element("guid"),
(DateTime)item.Element("pubDate"),
(int)item.Elements().Where(x => x.Name.LocalName == "thumbnail").FirstOrDefault().Attribute("width"),
(int)item.Elements().Where(x => x.Name.LocalName == "thumbnail").FirstOrDefault().Attribute("height"),
(string)item.Elements().Where(x => x.Name.LocalName == "thumbnail").FirstOrDefault().Attribute("url")
});
}
}
}
}
答案 2 :(得分:0)
我尝试了两种方式,老实说,我无法正确地反序列化而没有错误。幸运的是,我能够使用rss2json.com并将Rss提要转换为json,我可以使用Newtonsoft Json.Net进行解析