【.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; }
    }

 

posted @ 2013-12-13 17:33  Wiki-Locas  阅读(223)  评论(0编辑  收藏  举报