草庐IT

c# - 用于 Xml 序列化的 XmlRoot() 不起作用

coder 2024-05-26 原文

我正在尝试让我的 httphandler 打印出格式如下的 XML 文件:

<ScheduledShows>
    <ScheduledShowElement>...</ScheduledShowElement>
    <ScheduledShowElement>...</ScheduledShowElement>
    <ScheduledShowElement>...</ScheduledShowElement>
</ScheduledShows>

但出于某种原因,ScheduledShow.cs 中的属性 XmlRoot("ScheduledShowElement") 没有按照我希望的方式工作。相反,我得到的输出是:

<ScheduledShows>
    <ScheduledShow>...<ScheduledShow>
    <ScheduledShow>...<ScheduledShow>
    <ScheduledShow>...<ScheduledShow
</ScheduledShows>

基本上,节点的名称不会被覆盖为 .我如何让我的 xml 序列化程序将节点标记为?

下面是我的代码和 xml 输出。谢谢!

OneDayScheduleHandler.cs

using System;
using System.Collections.Generic;
using System.Web;

using System.Xml.Serialization;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data.Common;
using System.Data;
using System.IO;
using System.Xml;
using System.Text;
using CommunityServer.Scheduler;
namespace CommunityServer.Scheduler
{

    public class OneDayScheduleHandler : IHttpHandler
    {
        private readonly int NoLimitOnSize = -1;

        public void ProcessRequest(HttpContext context)
        {
            int offsetInDays, timezone, size;

            DateTime selectedDateTime;
            Int32.TryParse(context.Request.QueryString["timezone"], out timezone);
            Int32.TryParse(context.Request.QueryString["daysToOffset"], out offsetInDays);
            if (!String.IsNullOrEmpty(context.Request.QueryString["size"]))
            {
                Int32.TryParse(context.Request.QueryString["size"], out size);
            }
            else
            {
                size = NoLimitOnSize; 
            }

            if (timezone < (int)ScheduleConstants.TimeZone.Eastern)
            {
                selectedDateTime = DateTime.Now.AddMinutes(-180);
            }
            else
            {
                selectedDateTime = DateTime.Now;
            }
            selectedDateTime = selectedDateTime.AddDays(offsetInDays);
            context.Response.ContentType = "text/xml";
            context.Response.Write(SerializeToXML((List<ScheduledShow>)GetSheduledShowsByDateTime(selectedDateTime, size)));
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }



        public static IList<ScheduledShow> GetSheduledShowsByDateTime(DateTime date, int size)
        {
            List<ScheduledShow> shows = new List<ScheduledShow>();
            Database db = DatabaseFactory.CreateDatabase("TVScheduleSqlServer");

            DbCommand cmd = db.GetStoredProcCommand("sp_get_YTVDayShowlist");

            db.AddInParameter(cmd, "@CurrentDay", DbType.DateTime, date);
            IDataReader reader = db.ExecuteReader(cmd);
            int i = 0;
            while (reader.Read() && (i < size || size == -1))
            {
                ScheduledShow show = new ScheduledShow();
                show.AirTime = Convert.ToDateTime(reader["Airing_datetime"].ToString());
                show.StationId = Convert.ToInt32(reader["Station_id"].ToString());
                show.ScheduleRowId = Convert.ToInt32(reader["id"].ToString());
                show.StoryLine = reader["StoryLine"].ToString();
                show.Title = reader["Title_name"].ToString();
                show.SimsTitleId = Convert.ToInt32(reader["Sims_title_id"].ToString());
                show.ProgramId = Convert.ToInt32(reader["Program_id"].ToString());
                show.Genre = reader["Genre_list"].ToString();
                show.ProgramName = reader["program_name"].ToString();
                show.ShowUrl = reader["ShowURL"].ToString();
                show.CssClass = reader["CSSCLASS"].ToString();
                shows.Add(show);
                i++;
            }
            reader.Close();
            reader.Dispose();
            return shows;
        }

        static public string SerializeToXML(List<ScheduledShow> shows)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<ScheduledShow>), new XmlRootAttribute("ScheduledShows"));
            //StringWriter stringWriter = new StringWriter();
            string xml;
            using (MemoryStream memoryStream = new MemoryStream())
            {
                using (XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8))
                {
                    serializer.Serialize(xmlTextWriter, shows);
                    using (MemoryStream memoryStream2 = (MemoryStream)xmlTextWriter.BaseStream)
                    {
                        xml = UTF8ByteArrayToString(memoryStream2.ToArray());
                    }
                }
            }

            return xml;
        }

        /// <summary>
        /// To convert a Byte Array of Unicode values (UTF-8 encoded) to a complete String.
        /// </summary>
        /// <param name="characters">Unicode Byte Array to be converted to String</param>
        /// <returns>String converted from Unicode Byte Array</returns>
        private static String UTF8ByteArrayToString(Byte[] characters)
        {
            UTF8Encoding encoding = new UTF8Encoding();
            String constructedString = encoding.GetString(characters);
            return (constructedString);
        }
    }
}

预定显示.cs

using System;
using System.Xml.Serialization;


namespace CommunityServer.Scheduler
{

    [XmlRoot("ScheduledShowElement")]
    public class ScheduledShow
    {

        [XmlElement("AirTime")]
        public DateTime AirTime
        { get; set; }

        [XmlElement("StationId")]
        public int StationId
        { get; set; }

        [XmlElement("ScheduleRowId")]
        public int ScheduleRowId
        { get; set; }

        [XmlElement("StoryLine")]
        public string StoryLine
        { get; set; }

        [XmlElement("Title")]
        public string Title
        { get; set; }

        [XmlElement("ProgramId")]
        public int ProgramId
        { get; set; }

        [XmlElement("Genre")]
        public string Genre
        { get; set; }

        [XmlElement("ProgramName")]
        public string ProgramName
        { get; set; }

        [XmlElement("SimsTitleId")]
        public int SimsTitleId
        { get; set; }

        [XmlElement("ShowUrl")]
        public string ShowUrl
        { get; set; }

        [XmlElement("CssClass")]
        public string CssClass
        { get; set; }

    }
}

xml文件的输出

 <?xml version="1.0" encoding="utf-8"?>
<ScheduledShows xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <ScheduledShow>
        <AirTime xmlns="http://example.books.com">2009-09-17T10:20:00</AirTime>
        <StationId xmlns="http://example.books.com">770</StationId>
        <ScheduleRowId xmlns="http://example.books.com">17666100</ScheduleRowId>
        <StoryLine xmlns="http://example.books.com">When Dooley demonstrates his newest hobby, magic, Willa gets an idea.  A huge backyard magic show!  Starring the Great Doolini and his amazing disappearing elephant trick!  Unfortunately, Lou the elephant misunderstands and thinks Willa wants him to disappear for real.   In the middle of the show Willa must find Lou and apologize so he&amp;rsquo;ll reappear! / When the animals and Willa discover an egg in their backyard, their parental propriety  kicks in.   Especially when Dooley relates a factoid about young hatchlings imprinting on the first critter they see.   Willa&amp;rsquo;s critters vie for egg watching rights, so they can be first to be called Mama!  Or Poppa!</StoryLine>
        <Title xmlns="http://example.books.com">Disappearing Act / Great Eggspectations</Title>
        <ProgramId xmlns="http://example.books.com">2202</ProgramId>
        <Genre xmlns="http://example.books.com">Animated</Genre>
        <ProgramName xmlns="http://example.books.com">Willa's Wild Life</ProgramName>
        <SimsTitleId xmlns="http://example.books.com">68914</SimsTitleId>
        <ShowUrl xmlns="http://example.books.com">willas_wildlife</ShowUrl>
        <CssClass xmlns="http://example.books.com">none</CssClass>
    </ScheduledShow>
    <ScheduledShow>
        <AirTime xmlns="http://example.books.com">2009-09-17T10:45:00</AirTime>
        <StationId xmlns="http://example.books.com">770</StationId>
        <ScheduleRowId xmlns="http://example.books.com">17666105</ScheduleRowId>
        <StoryLine xmlns="http://example.books.com">It&amp;rsquo;s Club Day in Gloomsville. The gang splinter off to form clubs and prepare for the club&amp;rsquo;s appearance in the big Gloomsville parade.  Skull Boy forms the coolest club of all with some new jazzy skeletal friends that no one ever sees.  At first no one believes Skull Boy has these new friends since every time they want to meet them, they disappear.   When pressed for details, she admits she hasn&amp;rsquo;t met them yet &amp;ndash; they&amp;rsquo;re imaginary. </StoryLine>
        <Title xmlns="http://example.books.com">Skull Boys Don't Cry</Title>
        <ProgramId xmlns="http://example.books.com">1418</ProgramId>
        <Genre xmlns="http://example.books.com">Animated</Genre>
        <ProgramName xmlns="http://example.books.com">Ruby Gloom</ProgramName>
        <SimsTitleId xmlns="http://example.books.com">54297</SimsTitleId>
        <ShowUrl xmlns="http://example.books.com">rubygloom</ShowUrl>
        <CssClass xmlns="http://example.books.com">none</CssClass>
    </ScheduledShow>
    <ScheduledShow>
        <AirTime xmlns="http://example.books.com">2009-09-17T11:10:00</AirTime>
        <StationId xmlns="http://example.books.com">770</StationId>
        <ScheduleRowId xmlns="http://example.books.com">17666113</ScheduleRowId>
        <StoryLine xmlns="http://example.books.com">When Mad Margaret gets trapped in a jar she becomes a source of entertainment for Erky./Erky and Perky need a place to live and who better to find it for them than Frenzel.</StoryLine>
        <Title xmlns="http://example.books.com">Erky's Birthday / Location Location Location</Title>
        <ProgramId xmlns="http://example.books.com">1347</ProgramId>
        <Genre xmlns="http://example.books.com">Animated</Genre>
        <ProgramName xmlns="http://example.books.com">Erky Perky</ProgramName>
        <SimsTitleId xmlns="http://example.books.com">49009</SimsTitleId>
        <ShowUrl xmlns="http://example.books.com">erky_perky</ShowUrl>
        <CssClass xmlns="http://example.books.com">none</CssClass>
    </ScheduledShow>
    <ScheduledShow>
        <AirTime xmlns="http://example.books.com">2009-09-17T11:35:00</AirTime>
        <StationId xmlns="http://example.books.com">770</StationId>
        <ScheduleRowId xmlns="http://example.books.com">17666116</ScheduleRowId>
        <StoryLine xmlns="http://example.books.com">SYNOPSIS:The Joyco toy company has heard about George and his Zoopercar and they want to market it as their newest toy.  But George isn't interested in selling his prized mode of transportation.  Afterall, he and his Dad built it together and no one can take that special bond away from him.  But two Joyco toy employees, Barry and Steve, have other plans.  If George won't sell it to them, they will just have to take it, which they do.  But once their boss, Big Ed Easy finds out that George has be</StoryLine>
        <Title xmlns="http://example.books.com">ZOOPERCAR CAPER</Title>
        <ProgramId xmlns="http://example.books.com">311</ProgramId>
        <Genre xmlns="http://example.books.com" />
        <ProgramName xmlns="http://example.books.com">George Shrinks</ProgramName>
        <SimsTitleId xmlns="http://example.books.com">25371</SimsTitleId>
        <ShowUrl xmlns="http://example.books.com" />
        <CssClass xmlns="http://example.books.com">none</CssClass>
    </ScheduledShow>
    <ScheduledShow>
        <AirTime xmlns="http://example.books.com">2009-09-17T11:35:00</AirTime>
        <StationId xmlns="http://example.books.com">770</StationId>
        <ScheduleRowId xmlns="http://example.books.com">17666116</ScheduleRowId>
        <StoryLine xmlns="http://example.books.com">SYNOPSIS:The Joyco toy company has heard about George and his Zoopercar and they want to market it as their newest toy.  But George isn't interested in selling his prized mode of transportation.  Afterall, he and his Dad built it together and no one can take that special bond away from him.  But two Joyco toy employees, Barry and Steve, have other plans.  If George won't sell it to them, they will just have to take it, which they do.  But once their boss, Big Ed Easy finds out that George has be</StoryLine>
        <Title xmlns="http://example.books.com">ZOOPERCAR CAPER</Title>
        <ProgramId xmlns="http://example.books.com">311</ProgramId>
        <Genre xmlns="http://example.books.com" />
        <ProgramName xmlns="http://example.books.com">George Shrinks</ProgramName>
        <SimsTitleId xmlns="http://example.books.com">25371</SimsTitleId>
        <ShowUrl xmlns="http://example.books.com">george_shrinks</ShowUrl>
        <CssClass xmlns="http://example.books.com">none</CssClass>
    </ScheduledShow>
</ScheduledShows>

最佳答案

我在这里找到了问题的答案:

http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/4b228734-a209-445a-991c-0420b381ac93

我刚刚使用了 [XmlType("")] 并且成功了。

using System;
using System.Xml.Serialization;


namespace CommunityServer.Scheduler
{

    [XmlType("ScheduledShowElement")]
    public class ScheduledShow
    {

      ...
    }
}

关于c# - 用于 Xml 序列化的 XmlRoot() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1440845/

有关c# - 用于 Xml 序列化的 XmlRoot() 不起作用的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  3. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  4. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  5. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  6. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  7. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  8. ruby - inverse_of 是否适用于 has_many? - 2

    当我使用has_one时,它​​工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290

  9. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  10. ruby - 在 Ruby 中比较序列 - 2

    假设我必须(小型到中型)阵列:tokens=["aaa","ccc","xxx","bbb","ccc","yyy","zzz"]template=["aaa","bbb","ccc"]如何确定tokens是否以相同的顺序包含template的所有条目?(请注意,在上面的示例中,应忽略第一个“ccc”,从而由于最后一个“ccc”而导致匹配。) 最佳答案 这适用于您的示例数据。tokens=["aaa","ccc","xxx","bbb","ccc","yyy","zzz"]template=["aaa","bbb","ccc"]po

随机推荐