【发布时间】:2012-11-14 07:14:52
【问题描述】:
我需要在 REST WCF 服务中测试一个 .Net 方法,该方法需要传入一个 DataTable 并返回一个 DataTable:
DataTable TryPostDataTable(DataTable dataTable);
在我的 Java 测试代码中,我使用 HtttClient 向该服务发送 Post 请求。它有标题:
"Content-Type", "text/xml; charset=utf-8"
和身体:
<TryPostDataTable xmlns="http://tempuri.org/">
<dataTable>
<Person>
<name>A Name</name>
<age>An Age</age>
</Person>
</dataTable>
</TryPostDataTable>
但是当服务收到请求时,dataTable变量总是变成一个空的DataTable实例,没有行和列
如果我将数据表的类型更改为字符串,并将帖子正文更改为:
<TryPostDataTable xmlns="http://tempuri.org/">
<datatable>
TestString
</datatable>
</TryPostDataTable>
然后它会正确解析请求。
我不知道如何通过 HttpPost 传递 DataTable 对象。 Rest服务中从XML到DataTable的解析过程有什么问题?还是我的帖子不正确?
任何帮助将不胜感激。
//编辑1:
我尝试使用此代码生成 xml 内容:
DataTable dtEmployee = new DataTable("Person");
dtEmployee.Columns.Add("Name", typeof(string));
dtEmployee.Columns.Add("Age", typeof(string));
dtEmployee.Rows.Add("A Name", "An Age");
dtEmployee.WriteXml(@"C:\Working\Employee.xml", XmlWriteMode.WriteSchema);
将生成:
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Person" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Person">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" minOccurs="0" />
<xs:element name="Age" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
<Person>
<Name>A Name</Name>
<Age>An Age</Age>
</Person>
然后我使用 httpPost 将此 xml 发送到 TryPostDataTable 方法。
服务现在成功解析架构并生成一个“Person”表,其中包含 2 列“Name”-“Age”,分配给变量 dataTable。但是没有行 - 里面没有数据。
【问题讨论】:
-
你能显示你的person类吗?我的猜测是它不可序列化?
-
@Chris 我没有 Person 类。服务是否应该将我的 xml 解析为 DataTable ,名称为“Person”,2 列“name”-“age”,一行“A Name”-“An Age”?
-
否 - 您正在尝试发布具有 Person 类型属性的数据表,该属性具有字符串属性名称和年龄。
-
@Chris 我不确定。 xml 由以下代码生成: DataTable dt = new DataTable("Person"); dt.Columns.Add("名称", typeof(string)); dt.Columns.Add("年龄", typeof(string)); dt.Rows.Add("一个名字", "一个时代"); dt.WriteXml(@"C:\Working\Employee.xml");所以我只是将结果传回给 HttpPost 主体,但它生成了一个空的 DataTable 实例。我不想要一个类型化的 DataTable,您能否提供一个示例 xml 或 google 关键字?
标签: java wcf rest httpclient