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; }
公司项目遇到一个需要对接webservice的,webservice大部分用的都是xml来传输的,这里记录一下xml反序列化遇到的问题
1、右键依赖项,选择添加连接的服务
2、选择连接的服务
3、配置好后就可以调用
InfoToPingBiaoSoapClient client = new InfoToPingBiaoSoapClient(InfoToPingBiaoSoapClient.EndpointConfiguration.InfoToPingBiaoSoap12);
通过在线的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")]特性标签指定转化类型即可。