c# - 在 .NET 应用程序中传递 XML 的最佳方式是什么?

标签 c# xml

我有以下带有 “页面”节点 的 XML 文件,我想在我的应用程序中将其读入 “PageItem”对象。我将大多数 XML 节点保存为 string/int/DataTime 属性,效果很好。

但是将“content”节点的 XML 子节点存储在 PageItem 对象的属性中的最佳方式是什么,以便我以后可以在应用程序中解析它?我应该将它存储为字符串,然后再将字符串作为 XML 读取,还是有更有效的方法将 XML 子节点存储为属性?

<?xml version="1.0" encoding="utf-8" ?>
<pages>
    <page>
        <id>1</id>
        <whenCreated>2007-01-19T00:00:00</whenCreated>
        <itemOwner>edward</itemOwner>
        <publishStatus>published</publishStatus>
        <correctionOfId>0</correctionOfId>
        <idCode>contactData</idCode>
        <menu>mainMenu</menu>
        <title>Contact Data</title>
        <description>This is contact data page.</description>
        <accessGroups>loggedInUsers,loggedOutUsers</accessGroups>
        <displayOrder>10</displayOrder>
        <content>
            <form idcode="customers" query="limit 5; category=internal"/>
            <form idcode="customersDetail" query="limit 10; category=internal"/>
        </content>
    </page>
    <page>
        <id>2</id>
        <whenCreated>2007-01-29T00:00:00</whenCreated>
        <itemOwner>edward</itemOwner>
    ...

我将这个 XML 文件读入 PageItem 对象:

public class PageItem : Item
{
    public string IdCode { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public string Menu { get; set; }
    public string AccessGroups { get; set; }
    public int DisplayOrder { get; set; }
    public List<XmlNode> Content { get; set; }  //PSEUDO-CODE

使用此代码:

var pageItems = from pageItem in xmlDoc.Descendants("page")
    orderby (int)pageItem.Element("displayOrder")
    select new Models.PageItem
    {
        Id = (int)pageItem.Element("id"),
        WhenCreated = (DateTime)pageItem.Element("whenCreated"),
        ItemOwner = pageItem.Element("itemOwner").Value,
        PublishStatus = pageItem.Element("publishStatus").Value,
        CorrectionOfId = (int)pageItem.Element("correctionOfId"),
        IdCode = pageItem.Element("idCode").Value,
        Menu = pageItem.Element("menu").Value,
        Title = pageItem.Element("title").Value,
        Description = pageItem.Element("description").Value,
        AccessGroups = pageItem.Element("accessGroups").Value,
        DisplayOrder = (int)pageItem.Element("displayOrder"),
        Content = pageItem.Element("content").DescendantNodes() //PSEUDO-CODE
    };

最佳答案

你试过 XmlSerializer 了吗?

            public string Serialize(PageItem obj)
            {

                XmlSerializer formatter = new XmlSerializer(typeof(PageItem));

                MemoryStream ms = new MemoryStream();

                formatter.Serialize(ms, obj);

                ms.Position = 0;
                StreamReader sr = new StreamReader(ms);

                return sr.ReadToEnd();
            }

            public PageItem  Deserialize(string serializedObject)
            {

                XmlSerializer formatter = new XmlSerializer(typeof(PageItem));

                MemoryStream ms = serializedObject.ToMemoryStreamFromUTF8();

                return ((PageItem)formatter.Deserialize(ms));
            }

关于c# - 在 .NET 应用程序中传递 XML 的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/949331/

相关文章:

c# - 使用 C# API 通过 SSPI 向 vSphere 进行身份验证

c# - 如何在 ASP Core 的静态类中使用 "IWebHostEnvironment"

python - 使用 Python 将 XML 转为 CSV

java - 如何以编程方式更新 XML 正文并打印更新后的正文

java - Eclipse 在哪个操作系统下最健壮?

c# - 委托(delegate)如何使用通用且可扩展的类来响应多个事件?

c# - 以编程方式将 ObservableCollection 绑定(bind)到 ListBox

c# - XNA 项目单元测试、构建但运行测试时出错

python - 雅虎!商户结帐 API 问题

c# - 在 XML 序列化和反序列化之间保持对象值 (C#)