【问题标题】:Can we do CRUD operation on XML using serialization and Deserialization我们可以使用序列化和反序列化对 XML 进行 CRUD 操作吗
【发布时间】:2016-03-29 14:12:54
【问题描述】:

我有这个查询,我们可以使用 序列化和反序列化(使用 system.xml.serialization 库)对 XML 进行 CRUD 操作

我知道可以使用 xmldocument、XMLWriter 等其他库来完成,但只是想知道我们是否可以使用 序列化和反序列化(使用 system.xml.serialization 库)执行 CRUD )

我想在这里明确一点,“CRUD”操作主要是指 XML 的一部分而不是整个 xml。我不想反序列化整个 xml 并更新对象并序列化以获得最终的 xml。我只想反序列化/序列化不需要的部分。

【问题讨论】:

    标签: xml xml-serialization xml-deserialization


    【解决方案1】:

    基本上你的意思是:将对象转换为 XML 并将 XML 转换为对象。这可以通过

    using System.Xml.Serialization;
    

    假设您有一个列表:

    public List<Product> GetProductList()
    {
        List<Product> list = new List<Product>(); 
        Product product = new Product(new Section[3]);
        product.Sections[0] = new Section("1", new Header[3]);
        product.Sections[0].Headers[0] = new Header("P1", "C1", "T1");
        product.Sections[0].Headers[1] = new Header("P2", "C2", "T2");
    
        product.Sections[1] = new Section("2", new Header[3]);
        product.Sections[1].Headers[0] = new Header("P1", "C1", "T1");
        product.Sections[1].Headers[1] = new Header("P2", "C2", "T2");
        list.Add(product);
        return list;
    }
    

    您可以将其序列化为:

    private void Serialize()
    {
        List<Product> list = GetProductList(); 
        XmlSerializer serializer = new XmlSerializer(typeof(List<Product>));
        TextWriter tw = new StreamWriter(Server.MapPath("book1.xml"));
        serializer.Serialize(tw, list);
        tw.Close();
    }
    

    和反序列化一样:

    public void DeSerialize()
    {
        XmlSerializer serializer = new XmlSerializer(typeof(List<Product>));
        TextReader tr = new StreamReader(Server.MapPath("book1.xml"));
    
        List<Product> b = (List<Product>)serializer.Deserialize(tr);
        tr.Close(); 
        Foreach (Product product in b)
        {
            Response.Write(product.Sections[0].Name + ",");
            Response.Write(product.Sections[1].Name);
        }
    }
    

    【讨论】:

    • 我同意你的回答,但我不是在寻找它......也许我无法描述我的问题......所以我再试一次
    • 问题是当我们反序列化 xml 文件时,我们将整个 xml 序列化数据转换为对象,所以我的查询假设我有一个非常大的 XML 文件并且我想更新特定的节点或元素,我为什么要为此反序列化整个 xml 并将其序列化回那个小变化...这不是错...。并且知道还有其他方法可以解决我的查询,但我只是想知道是否可以在 xml 中进行如此小的更改而不覆盖整个 xml
    猜你喜欢
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2018-06-21
    相关资源
    最近更新 更多