XmlRpc.net 入参结构体嵌套的转义操作
项目使用C#开发,需要使用XmlRpc和Linux服务器端交互,用的是XmlRpc.net。
普通的程序调用入参和出差都没有问题,今天遇到入参结构体嵌套,结果 args 入参在服务器端不能解析。抓包数据如下:
<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>add</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>time</name>
<value>
<i4>1371571200</i4>
</value>
</member>
<member>
<name>args</name>
<value>
<struct>
<member>
<name>sites</name>
<value>
<i4>1</i4>
</value>
</member>
</struct>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
和服务器端同事讨论之后得知服务器端不支持结构体嵌套,需要把 args 结构体转成字符串发过去。
代码如下:
XmlRpcStruct argParam = new XmlRpcStruct();
…… // 给 argParam 赋值
XmlRpcSerializer serial = new XmlRpcSerializer(); // XmlRpc 自带的序列化类
string arg = null;
using (MemoryStream ms = new MemoryStream())
{
XmlWriter xtw = XmlWriter.Create(ms);
serial.Serialize(xtw, argParam, new MappingActions());
xtw.Flush();
xtw.Close(); arg = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
arg = arg.Replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", "");
} xmlParam["args"] = arg;
经过测试服务器端可以获取到 args 入参。抓包数据如下:
<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>add</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>time</name>
<value>
<i4>1371571200</i4>
</value>
</member>
<member>
<name>args</name>
<value><value><struct><member><name>sites</name><value><i4>1</i4></value></member></struct></value></value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
补充一点:
args 参数以字符串方式赋值默认会有一个<string>……</string>标记。抓包如下:
<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>add</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>time</name>
<value>
<i4>1371571200</i4>
</value>
</member>
<member>
<name>args</name>
<value>
<string><value><struct><member><name>sites</name><value><i4>1</i4></value></member></struct></value></string>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
希望不显示<string>……</string>标记则需要设置 UseStringTag 属性为 False :
proxyClient = XmlRpcProxyGen.Create<IXmlRpcClient>();
proxyClient.UseStringTag = false;
XmlRpc.net 入参结构体嵌套的转义操作的更多相关文章
- C语言结构体嵌套
#include <stdio.h> int main() { /*************************************************** *结构体嵌套:结构 ...
- 【C++】结构体/结构体数组/结构体指针/结构体嵌套/函数参数/const
一.结构体声明 struct Student { //成员列表 string name; int age; int score; }; //s3;定义时直接声明 int main() { struct ...
- abap中结构体嵌套结构体。
1: 结构体中嵌套结构体. *&---------------------------------------------------------------------* *& Re ...
- @Validated和@Valid区别:Spring validation验证框架对入参实体进行嵌套验证必须在相应属性(字段)加上@Valid而不是@Validated
Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR- ...
- jchdl - RTL实例 - And2And(结构体嵌套的使用)
https://mp.weixin.qq.com/s/PQIPkDymvcGc_re8ux50vA 结构体可以嵌套使用. 参考链接 https://github.com/wjcdx/jchdl ...
- c语言结构体3之结构体嵌套
注意: 1结构体内部再次定义一个结构体 但是没有创建结构体的实例 也就是说再次定义的结构体内部的变量会被当做母结构体的成员变量 struct tianchao { int data; ]; stru ...
- C语言实现链表中结构体嵌套
1.首先,定义两个结构体,一个用于定义链表,一个用于定义数据 // 定义数据相关的结构体 typedef struct Student{ int stu_id; ]; }Stu; // 定义链表相关的 ...
- Golang结构体struct的使用(结构体嵌套, 匿名结构体等)
转自: https://studygolang.com/articles/11313 golang中是没有class的,但是有一个结构体struct,有点类似,他没有像java,c++中继承的概念,但 ...
- c语言_FILE结构体解释及相关操作
1. 文件和流的关系 C将每个文件简单地作为顺序字节流(如下图).每个文件用文件结束符结束,或者在特定字节数的地方结束,这个特定的字节数可以存储在系统维护的管理数据结构中.当打开文件时,就建立了和文件 ...
随机推荐
- 在Extjs中对日期的处理,以及在后端数据在SQL语句的判断处理
jsp页面可选择时间: { xtype : 'datefield', id : 'START_CREATION_DATE_', format : 'Y-m-d H:i:s', submitFormat ...
- pdfbox加载pdf时遇到wrappedioexception报错处理方式
现在一个项目要对pdf做处理.由于其中一个pdf约为80M左右,用pdfbox读取pdf时遇到了wrappedioexception错误.监控得到说内存不足.于是请教项目经理.他告诉我在Open De ...
- android:clipChildren属性的作用
该属性默认为true,这个属性需要添加到最顶层的ViewGroup,作用是控制子View是否可以超出它所在的父View设定的边界 比如ImageView设置高度100dp,而它所在的父View设置的高 ...
- Idea+TestNg配置test-output输出
说明:testNG的工程我是使用eclipse创建的,直接导入到idea中,运行test时不会生产test-output,只能在idea的控制台中查看运行结果,然后到处报告,经过不懈的百度终于找到怎么 ...
- 《转载》Spring MVC之@RequestBody, @ResponseBody 详解
引言: 接上一篇文章讲述处理@RequestMapping的方法参数绑定之后,详细介绍下@RequestBody.@ResponseBody的具体用法和使用时机: 简介: @RequestBody 作 ...
- 【java回调】java两个类之间的回调函数传递
背景交代:熟悉用js开发的cordovaAPP:对java一窍不通的我,老师让做一个监测用户拍照事件的功能,无奈没有找到现成的库,无奈自己动手开发java插件~~0基础java GreenHand,祝 ...
- 数独 JAVA实现
数独游戏的规则从很久之前就知道,但是一直都没怎么玩过,然后到了大学,大一下学期自己学dfs的时候,刚刚好碰到了一个数独的题目,做出来后,感觉还是挺有成就感的 然后大二学了JAVA,看了下那个一些有关于 ...
- 从C++实现Ping开始说起
在C++中实现ping功能,并不难.但真正了解ping是需要花费一番功夫的. Ping功能是在ICMP基础上实现的.IP协议并不是一个可靠的协议,它不保证数据被送达,那么,保证数据送达的工作应该由其他 ...
- ListView只更新某个item
方案1:针对需要更新的item调用public View getView(int position, View convertView, ViewGroup parent)即可.如: public c ...
- c++拷贝构造和编译优化
#include <iostream> using namespace std; class MyClass { public: MyClass(); MyClass(int i); My ...