Xml反序列化记录

1、概述
公司项目遇到一个需要对接webservice的,webservice大部分用的都是xml来传输的,这里记录一下xml反序列化遇到的问题
2、xml工具类
xml序列化:
   public static string Serialize<T>(T obj)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            StringWriter writer = new StringWriter(CultureInfo.InvariantCulture);
            serializer.Serialize(writer, obj);
            string xml = writer.ToString();
            writer.Close();
            writer.Dispose();

            return xml;
        }

xml反序列化

 public static T Deserialize<T>(string xml)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            StringReader reader = new StringReader(xml);
            T result = (T)(serializer.Deserialize(reader));
            reader.Close();
            reader.Dispose();

            return result;
        }

3、webservice调用

1、右键依赖项,选择添加连接的服务

 2、选择连接的服务

 3、配置好后就可以调用

 InfoToPingBiaoSoapClient client = new InfoToPingBiaoSoapClient(InfoToPingBiaoSoapClient.EndpointConfiguration.InfoToPingBiaoSoap12);

4、遇到的问题

  通过在线的xml转json,在从json转C#就可以获得对应类,因为xml反序列化只会提醒反序列化出错,却不会告诉你哪个字段出错,所以可能会有以下几个问题

1、转成C#的类型大小写可能和xml不一致,会导致反序列化失败

      可以自己实例化一个类型,然后序列化,将序列化后的xml和webservice返回的xml进行对比,避免大小写问题

2、xml类型的泛型问题

    

    public class xmlroot<T>
    {
        /// <summary>
        /// 
        /// </summary>
        public danweis<T> danweis { get; set; }
    }

  如上图的泛型,在xml序列化反序列化中会变成<xmlrootOfdanweiinfo>,danweiinfo是传入的类型,这种情况下需要加上    [XmlRoot("xmlroot")]特性标签指定转化类型即可。

猜你喜欢

转载自www.cnblogs.com/sadsadfd/p/11922799.html