C#使用XmlSerializer对存在同属性名的对象序列化时报错

76
补充展位 Pages_Weblog_Get#0
文章摘要
此内容由人工摘要内容,并由AI根据文章内容进行润色
暂无内容

一位网友碰到的问题 顺手解决了下 这里做下备忘

问题: 使用XmlSerializer在对一个对象序列化成XML操作时出现了报错 错误信息如下:

C#使用XmlSerializer对存在同属性名的对象序列化时报错

System.InvalidOperationException:“反射类型“YuanTK.DicomPrintSCP.Demo.Program.Zzjpara”时出错。”
InvalidOperationException: 类型“YuanTK.DicomPrintSCP.Demo.Program.Request2203A.Input”和“YuanTK.DicomPrintSCP.Demo.Program.Request2201.Input”都使用来自命名空间“”的 XML 类型名称“Input”。请使用 XML 特性为该类型指定唯一的 XML 名称和/或命名空间。


原来的实体类差不多是这样的

      public class Zzjpara
        {
            public Request2201 request2201 { get; set; }
            public Request2203A request2203A { get; set;}
        }
        public class Request2203A
        {
            public Input input { get; set; }
            public class Input
            {
                public string xxx { get; set; }
            }
        }
        public class Request2201
        {
            public Input input { get; set; }
            public class Input
            {
                public int xxx { get; set; }
            }
        }

可以看到Zzjpara这个类里面存在两个子属性类 每个子类里面存在同名属性 Input 之所以报错就是这个属性导致的,当对Zzjpara 对象进行序列化xml就会报上面的错误

在不能修改子类属性名的情况下 想要对这个实体进行序列化xml 的解决办法如下

给子类的的input添加扩展属性用命名空间来给属性进行区分 这样就可以序列化xml了 代码如下:

      public class Zzjpara
        {
            public Request2201 request2201 { get; set; }
            public Request2203A request2203A { get; set;}
        }
        public class Request2203A
        {
		    [XmlElement(Namespace = "input1")]//这里Namespace 不能一样
            public Input input { get; set; }
            public class Input
            {
                public string xxx { get; set; }
            }
        }
        public class Request2201
        {
		    [XmlElement(Namespace = "input2")]//这里Namespace 不能一样
            public Input input { get; set; }
            public class Input
            {
                public int xxx { get; set; }

            }
        }

再执行XmlSerializer 就不报错可以正常序列化成xml了

            XmlSerializer xs = new XmlSerializer(zzjpara.GetType());
            string xml = "D:/Myxml.xml";
            TextWriter tw = new StreamWriter(xml);
            xs.Serialize(tw, zzjpara);
            tw.Close();
            string xmlString = System.IO.File.ReadAllText(xml);
补充展位
Pages_Weblog_Get#91ea4708-e92d-45df-83f0-ae45018935b5
补充展位 Pages_Weblog_Get#1
补充展位 Pages_Weblog_Get#2
专题推荐
暂无内容
补充展位 Pages_Weblog_Get#3