[英]Most efficient way to get XML data from a file in App_Data and cast it to IQueryable<MyModel>?
我将现有的WebForms应用程序转换为MVC5。 有数据,存储在/ App_Data文件夹中的XML文件中。 我创建了一个包含所有匹配项的模型。 我需要从此XML文件中获取数据,然后将其作为IQueryable返回。
什么将是最有效/最佳做法? 任何简单的例子都很好。
澄清我知道从XML获取数据的各种方法。 这个问题更多地与将数据放入IQueryable有关。
这是我的模型:
using System;
using System.ComponentModel.DataAnnotations;
namespace Framework.Models
{
public class NewsModel
{
public NewsModel()
{
Title = string.Empty;
Summary = string.Empty;
Image = string.Empty;
ImageWidth = 0;
ImageHeight = 0;
ImageSrcSet = string.Empty;
ImageSizes = string.Empty;
Url = new Uri("#");
UrlText = string.Empty;
UrlTarget = "_self";
Date = DateTime.Now;
}
[Display(Name = "Title")]
public String Title { get; set; }
[Display(Name = "Summary")]
public String Summary { get; set; }
[Display(Name = "Image")]
public String Image { get; set; }
[Display(Name = "ImageWidth")]
public int ImageWidth { get; set; }
[Display(Name = "ImageHeight")]
public int ImageHeight { get; set; }
[Display(Name = "ImageSrcSet")]
public String ImageSrcSet { get; set; }
[Display(Name = "ImageSizes")]
public String ImageSizes { get; set; }
[Display(Name = "Url")]
public Uri Url { get; set; }
[Display(Name = "UrlText")]
public String UrlText { get; set; }
[Display(Name = "UrlTarget")]
public String UrlTarget { get; set; }
[Display(Name = "Date")]
public DateTime Date { get; set; }
}
}
这是我的XML文档:
<?xml version="1.0" encoding="utf-8" ?>
<News>
<Item>
<Title><![CDATA[Example Title 01]]></Title>
<Summary>
<![CDATA[
Example Text 01
]]>
</Summary>
<Image><![CDATA[]]></Image>
<ImageWidth>1420</ImageWidth>
<ImageHeight>480</ImageHeight>
<ImageAlignment>left</ImageAlignment>
<ImageSrcSet><![CDATA[]]></ImageSrcSet>
<ImageSizes><![CDATA[]]></ImageSizes>
<Url><![CDATA[]]></Url>
<UrlText><![CDATA[]]></UrlText>
<UrlTarget>_blank</UrlTarget>
<Date><![CDATA[05/01/2009]]></Date>
</Item>
<Item>
<Title><![CDATA[Example Title 02]]></Title>
<Summary>
<![CDATA[
Example Text 02
]]>
</Summary>
<Image><![CDATA[]]></Image>
<ImageWidth>920</ImageWidth>
<ImageHeight>480</ImageHeight>
<ImageAlignment>left</ImageAlignment>
<ImageSrcSet><![CDATA[]]></ImageSrcSet>
<ImageSizes><![CDATA[]]></ImageSizes>
<Url><![CDATA[]]></Url>
<UrlText><![CDATA[]]></UrlText>
<UrlTarget>_self</UrlTarget>
<Date><![CDATA[05/01/2009]]></Date>
</Item>
</News>
这会让您入门
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication43
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XmlSerializer xs = new XmlSerializer(typeof(Framework.Models.News));
XmlTextReader reader = new XmlTextReader(FILENAME);
Framework.Models.News news = (Framework.Models.News)xs.Deserialize(reader);
}
}
}
namespace Framework.Models
{
[XmlRoot("News")]
public class News
{
[XmlElement("Item")]
public List<NewsModel> newsModel { get; set; }
}
[XmlRoot("Item")]
public class NewsModel
{
public NewsModel()
{
Title = string.Empty;
Summary = string.Empty;
Image = string.Empty;
ImageWidth = 0;
ImageHeight = 0;
ImageSrcSet = string.Empty;
ImageSizes = string.Empty;
Url = "#";
UrlText = string.Empty;
UrlTarget = "_self";
//Date = DateTime.Now;
}
[XmlElement("Title")]
public String Title { get; set; }
[XmlElement("Summary")]
public String Summary { get; set; }
[XmlElement("Image")]
public String Image { get; set; }
[XmlElement("ImageWidth")]
public int ImageWidth { get; set; }
[XmlElement("ImageHeight")]
public int ImageHeight { get; set; }
[XmlElement("ImageSrcSet")]
public String ImageSrcSet { get; set; }
[XmlElement("ImageSizes")]
public String ImageSizes { get; set; }
[XmlElement("Url")]
public string Url { get; set; }
[XmlElement("UrlText")]
public String UrlText { get; set; }
[XmlElement("UrlTarget")]
public String UrlTarget { get; set; }
[XmlElement("Date")]
public string Date { get; set; }
}
}
如果您有创建对象的代码,则可以将其放入IQueryable中,如下所示:
NewsModel newsModel = CreateNewsModel();
var query = new [] { newsModel }.AsQueryable();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.