zoukankan      html  css  js  c++  java
  • 【.Net基础02】XML序列化问题

    【背景描述】:在开发软件的过程中,经常需要通过XML序列化一些对象,用于数据的传输与存储

    【问题描述】:现在有这样一个问题,有3三个类,Movie,Cinema,SuperCinema。SuperCinema继承自Cinema,具体看代码。

    【Code】

    public class Movie
        {
            public string Id { get; set; }
            public string Name { get; set; }
            public DateTime ProduceTime { get; set; }
            public string DirectorName { get; set; }
        }
    public class Cinema
        {
            public string Name { get; set; }
    
            public List<Movie> Movies { get; set; }
        }
    public class SuperCinema : Cinema
        {
            public new List<string> Movies { get; set; }
        }
    static void Main(string[] args)
            {
                SuperCinema c1 = new SuperCinema();
                XmlSerializer serializer = new XmlSerializer(typeof(SuperCinema));
    
                Console.Read();
            }

    SuperCinema中隐藏了父类中的成员Movies,更改了数据类型,此时序列化会报这样的错误:

    {"类型 System.Collections.Generic.List`1[System.String] 的成员 SuperCinema.Movies 隐藏类型 System.Collections.Generic.List`1[Json序列化与反序列化.Movie] 的基类成员 Cinema.Movies。使用 XmlElementAttribute 或 XmlAttributeAttribute 指定一个新名称。"}

    此时如果仅仅在SuperCinema类中,在Movies属性上加上[XmlElement("NewName")]并不起作用。

    如:

    public class SuperCinema : Cinema
        {
            [XmlElement("NewMovie")]
            public new List<string> Movies { get; set; }
        }

    既然我们需要隐藏父类的Movies属性,那么直接在父类Cinema中使Movies属性不进行序列化就可以了。

    如:

    public class Cinema
        {
            public string Name { get; set; }
    
            [XmlIgnore]
            public List<Movie> Movies { get; set; }
        }
  • 相关阅读:
    矩阵树定理
    随机乱搞算法
    数学
    BZOJ——3412: [Usaco2009 Dec]Music Notes乐谱
    BZOJ—— 3402: [Usaco2009 Open]Hide and Seek 捉迷藏
    洛谷—— P2884 [USACO07MAR]每月的费用Monthly Expense
    洛谷—— P2417 课程
    洛谷—— P1577 切绳子
    COGS 2598. 美丽的感觉
    10.23 模拟赛
  • 原文地址:https://www.cnblogs.com/fb-boy/p/3473581.html
Copyright © 2011-2022 走看看