如果遇到:   根级别上的数据无效。 行 1,位置 1   。;即无法反序列化(反序列失败),得到对象为null ,把 xml 文本 Trim一下。

xml=xml.Trim();

序列化完毕你可以看到尾部有填充的 \0 。。。 要Trim掉。  参考:https://www.cnblogs.com/XChWaad/p/3346875.html

你可以TRIM 前后观察下Length. 有不可见空格

xml.Length
328

xml=xml.Trim();

xml.Length
327

XML SAMPLE:

<xml>

<bank_type><![CDATA[CFT]]></bank_type>
<cash_fee><![CDATA[1]]></cash_fee>
<fee_type><![CDATA[CNY]]></fee_type>
<is_subscribe><![CDATA[Y]]></is_subscribe>

<nonce_str><![CDATA[74971f5846d34fe0a35b8f636413f0e4]]></nonce_str>

<result_code><![CDATA[SUCCESS]]></result_code>
<return_code><![CDATA[SUCCESS]]></return_code>
<sign><![CDATA[C46252FFBA5F10F39F7A040F3BC5D58D]]></sign>

<sub_is_subscribe><![CDATA[N]]></sub_is_subscribe>

<time_end><![CDATA[20190417113750]]></time_end>
<total_fee>1</total_fee>
<trade_type><![CDATA[JSAPI]]></trade_type>

</xml>

--

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml.Serialization;
using System.Xml; namespace SixunWxPayApi
{
public class XmlSerializerUtil
{ public static T Deserialize<T>( string xml)
{
      xml = xml.Trim(); //避免有不可见空格字符,导致无法反序列化
      Type type=typeof(T);
try
{ using (StringReader sr = new StringReader(xml))
{
XmlSerializer xmldes = new XmlSerializer(type);
return (T)xmldes.Deserialize(sr);
}
}
catch (Exception e)
{
// System.Diagnostics.Debug.WriteLine("ERROR " + e.StackTrace);
return default(T);
}
} //where T : class
public static string XmlSerializer<T>(T serialObject)
{
XmlSerializer ser = new XmlSerializer(typeof(T));
System.IO.MemoryStream mem = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(mem, Encoding.UTF8); // 强制指定命名空间,覆盖默认的命名空间
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add(string.Empty, string.Empty); ser.Serialize(writer, serialObject, namespaces);
writer.Close();

        string rst= Encoding.UTF8.GetString(mem.ToArray());
        rst = rst.Trim();//避免有不可见空格字符


        return rst;

        }

    }
}

--

实体类要加声明:

[XmlRootAttribute("xml", Namespace = "", IsNullable = false)]

调用:

WxResultBaseModel wrbm = XmlSerializerUtil.Deserialize<WxResultBaseModel>(strreturn);

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml.Serialization; namespace SixunWxPayApi
{
/// <summary>
/// 微信返回数据基础model,XML根元素是"xml"
/// </summary>
[XmlRootAttribute("xml", Namespace = "", IsNullable = false)]
public class WxResultBaseModel
{
public string result_code { get; set; }
public string return_code { get; set; } public string sign { get; set; } public string mch_id { get; set; } public string sub_mch_id { get; set; } public string out_trade_no { get; set; } public string transaction_id { get; set; } public string trade_state { get; set; } public string total_fee { get; set; } }
}

--

//如果是数组,一定要指明XmlElement
[XmlElement("bankAccountVo")]

C# .NET XML 序列化为对象,反序列化的更多相关文章

  1. XML序列化成对象

    这个是和ALM上传测试结果结合使用的//把xml序列化成对象以及把对象序列化成xml using System; using System.Data; using System.Configurati ...

  2. Json序列化为对象方法

    /// <summary>/// json 序列化为对象/// </summary>/// <typeparam name="T">对象类型&l ...

  3. Android中序列化对象到XMl 和 XML反序列化为对象

    package com.example.xmloperation; import java.io.File; import java.io.FileOutputStream; import java. ...

  4. jackson使用问题:mapper.readValue()将JSON字符串转反序列化为对象失败或异常

    问题根源:转化目标实体类的属性要与被转JSON字符串总的字段 一 一对应!字符串里可以少字段,但绝对不能多字段. 先附上我这段出现了问题的源码: // 1.接收并转化相应的参数.需要在pom.xml中 ...

  5. C# 后台解析json,简单方法 字符串序列化为对象,取值

    如果后台是一个JSON的字符串格式如下: string str = "{\"Success\":true,\"Msg\":\"成功!\&qu ...

  6. java 使用xom对象数据序列化为xml、反序列化、Preferences相关操作小案例

    package org.rui.io.xml; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import ...

  7. 匿名对象序列化为XML

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...

  8. C#操作Xml:XmlSerializer 对象的Xml序列化和反序列化

    这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中的对 ...

  9. JSON和XML格式与对象的序列化及反序列化的辅助类

    下面的代码主要是把对象序列化为JSON格式或XML格式等 using System; using System.Collections.Generic; using System.Globalizat ...

随机推荐

  1. 使用iframe框架后的页面跳转时目标页面变为iframe的子页面的问题

    <frameset rows="4,200,10,*,120" cols="*" framespacing="0" framebord ...

  2. Openresty 进行限流的方法

    1.使用Openresty进行限流, 使用漏桶原理进行设计 和路由系统设计类似. LUA脚本去通过变量去redis取值,从redis中得到队列的大小.漏和桶的大小. 然后通过比较,队列大小与漏和桶进行 ...

  3. Javascript 数组相关操作

    数组排序问题: sort() arr.sort() 可以直接进行排序,但是排序的方式是按unicode 顺序而来,比如1,1000,200,这个顺序不是我们想要的结果: 所以有了另一种方法,针对num ...

  4. Javascript学习二---DOM元素操作

    Javascript 主要包括:JS的语法,DOM和BOM操作以及ECMAScript语法. 1 获取元素的方法 获取元素方法: 通过ID:document.getElementById(); 一个 ...

  5. ansible小计

    一.忽略hosts,只在一台机器上执行: /usr/local/bin/ansible-playbook /app/ansiblecfg/ztr/ent_extract.yml --limit=10. ...

  6. day 15递归 匿名函数

    三元表达式 目的是简化书写 局限性:三元表达式智能简化仅有两个分支的if判断,而且这个判断无论是否成立都必须要返回值 res = True if age >=18 else False 递归: ...

  7. easyui获取选中行上一行的数据

    text: 'XX',            iconCls: 'icon-ok',            handler: function () {                var rowI ...

  8. Codeforces1097D. Makoto and a Blackboard(数论+dp+概率期望)

    题目链接:传送门 题目大意: 给出一个整数n写在黑板上,每次操作会将黑板上的数(初始值为n)等概率随机替换成它的因子. 问k次操作之后,留在黑板上的数的期望. 要求结果对109+7取模,若结果不是整数 ...

  9. Sql Server 2005/2008数据库被标记为“可疑”/“质疑”的问题

    日常对Sql Server 2005关系数据库进行操作时,有时对数据库(如:Sharepoint网站配置数据库名Sharepoint_Config)进行些不正常操作如数据库在读写时而无故停止数据库,从 ...

  10. Uva10562——Undraw the Trees

    上来一看感觉难以下手,仔细想想就是dfs啊!!!! #include <cstdio> #include<iostream> #include<iomanip> # ...