繁体   English   中英

从App_Data中的文件获取XML数据并将其转换为IQueryable的最有效方法 <MyModel> ?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM