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; }
        }
  • 相关阅读:
    js 实现继承的6种方式(逐渐优化)
    http2.0 特性
    http 206请求
    http put post请求区别
    stopPropagation 和stopImmediatePropagation区别
    JavaScript事件流
    BFC特性 形成BFC
    元素高度、宽度获取 style currentStyle getComputedStyle getBoundingClientRect
    三栏布局解决方案
    jquery vue 框架区别
  • 原文地址:https://www.cnblogs.com/fb-boy/p/3473581.html
Copyright © 2011-2022 走看看