xml 反序列化成 datatable

问题描述

传入参数:stringstrXml="<StockInDetails><StockInDetail><id>2615905</id><pid>502649</pid><ownerId>4332</ownerId><ownerCode>3122446934</ownerCode><ownerName></ownerName><billNo>2358I201501057912088</billNo><cid>8150682</cid><qty>213.000000</qty><money>195.960000</money><gWeight>2.272300</gWeight><nWeight>2.130000</nWeight><cQty>0.000000</cQty><sQty>17.000000</sQty><tag>SH1229F02-2</tag><mergerCargoId>M1420429480772</mergerCargoId><orgCargoId>Y1420429480807</orgCargoId><hsCode>8536901100</hsCode><gName></gName><model>418234</model><unit>007</unit><curr>303</curr><country>304</country><cargoType>13</cargoType><cWeight>0.000000</cWeight><sWeight>0.170000</sWeight><cMoney>0.000000</cMoney><sMoney>15.640000</sMoney><usdMoney>334.343621</usdMoney><cusNo>221820141185146968</cusNo></StockInDetail></StockInDetails>";反序列化方法:publicstaticDataTableFromXmlDataTable(stringstrXml){StringReaderstrReader=newStringReader(strXml);XmlReaderxmlReader=XmlReader.Create(strReader);try{DataTabledt=default(DataTable);XmlSerializerserializer=newXmlSerializer(typeof(DataTable));if(serializer.CanDeserialize(xmlReader)){dt=serializer.Deserialize(xmlReader)asDataTable;}xmlReader.Close();strReader.Close();returndt;}catch(Exceptionex){throwex;}finally{if(xmlReader!=null){xmlReader.Close();}if(strReader!=null){strReader.Close();}}}错误:{"XML文档(1,2)中有错误。"}用户代码未处理System.ExceptionHResult=-2146233088Message=不应有<StockInDetailsxmlns=''>。Source=WebStackTrace:在Web.WebService.DataUploadWebService.UploadStockInListService(StringstrStockInList,StringuserId,List`1param)位置e:Work3.SourceWebWebServiceDataUploadWebService.asmx.cs:行号92InnerException:HResult=-2146233088Message=在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderDataTable.Read1_DataTable()InnerException:

解决方案

解决方案二:
看样子是因为NameSpace为空导致的,可以使用newXmlSerializer(Type,XmlNameSpace)的重载dataTable本身就封装有现成的WriteXml和ReadXml方法
解决方案三:

解决方案四:
您好,我是讲XML文件反序列化成datatable
解决方案五:
哥,你就不能犯序列化成List<T>的?为什么一定要DataTable呢?
解决方案六:
//用表名指定行节点名vardt=newDataTable("StockInDetail");dt.Columns.AddRange(newDataColumn[]{newDataColumn("id",typeof(int)),newDataColumn("pid",typeof(int)),//...});varsr=newStringReader(strXml);using(varxr=XmlTextReader.Create(sr)){dt.ReadXml(xr);}

解决方案七:
不过xml一般首先实体对象序列化,比table方便
解决方案八:
引用5楼dongxinxi的回复:

//用表名指定行节点名vardt=newDataTable("StockInDetail");dt.Columns.AddRange(newDataColumn[]{newDataColumn("id",typeof(int)),newDataColumn("pid",typeof(int)),//...});varsr=newStringReader(strXml);using(varxr=XmlTextReader.Create(sr)){dt.ReadXml(xr);}

正解,你的XML从何而来?如果是通过DataTable序列化而来,注意把元数据带出来;如果是自己拼出来的,反序列化时就要手动初始化元数据了。
解决方案九:
你这个XML不是由Table序列化得来的,谈何返序列化。。。

时间: 2024-10-31 04:21:17

xml 反序列化成 datatable的相关文章

用fastjson,把一个JSON字符串反序列化成Map的错误。

问题描述 用fastjson,把一个JSON字符串反序列化成Map的错误. 解决方案 需要用snmp4j开发一个网管系统,现在手头已经有了一台H3C的测试设备,和他们厂家的私有MIB库文件. 用从网上找到的代码,使用snmp的get方式已经可以取到设备的"设备名称"."设备地址"等信息.设备名称信息如下: 1.3.6.1.2.1.1.1.0 = H3C Comware Platform Software, Software Version 5.20, Release

net-使用Newtonjson.soft怎样将如下的JSON,反序列化成UserInfo对象

问题描述 使用Newtonjson.soft怎样将如下的JSON,反序列化成UserInfo对象 ""{""Dict"":{""User"":{""userDepartID"":99""userName"":""admin""}}""Timeout""

使用fastjson,把一个JSON字符串反序列化成Map的错误。

问题描述 用的fastjons的版本是: 1.1.41json字符串如下:{ "user_id": 5300, "flag": 0, "configs": [ { "user_id": 5300, "config_item_id": 1015, "type": 0 }, { "user_id": 5300, "config_item_id": 10

android-为什么一个序列化的栈能反序列化成一个ArrayList

问题描述 为什么一个序列化的栈能反序列化成一个ArrayList 序列化: Bundle activityArguments = new Bundle(); Stack<Class<? extends WizardStep>> wizardSteps = new Stack<Class<? extends WizardStep>>(); wizardSteps.push(CreateAlarmStep5View.class); wizardSteps.pus

以读取博客园随笔备份为例 将xml 序列化成json,再序列化成对象

本文转载:本文转载:http://www.cnblogs.com/codealone/archive/2013/04/14/3020161.html 在线JOSN编辑器http://tools.jb51.net/tools/json/json_editor.htm 非常强大! 资源下载:http://files.cnblogs.com/codealone/ConsoleApplication2.zip Json查看工具:http://files.cnblogs.com/codealone/Jso

帮我看看这个怎么序列化和反序列化成XML

问题描述 我程序里要用到几种自定义的对象,一共是9个对象.每一个对象有不同的属性(我把它定义成结构体了).其中对象1的属性是结构体LEDWindowsAttribute对象2.对象3的属性是结构体TextWindowsAttribute对象4.对象5.对象6.对象7.对象8.对象9的属性是结构体TimeWindowsAttribute对象1是父节点(只有一个)对象2------对象8是子节点.我通过程序上的按钮操作动态的增加或删除子节点(用TreeView显示父节点和子节点,子节点里有重复对象比

datalist数据如何转化成DataTable或DataSet?

问题描述 请教. 解决方案 解决方案二:DataTabledt=newDataTable();dt.Columns.Add("col1");dt.Columns.Add("col2");foreach(******){DataRowdtRow=dtTable.NewRow();dtRow["col1"]=datalist.***;dtRow["col2"]=datalist.***;dtTable.Rows.Add(dtRow

在线求指点:JSP输出的特殊XML 转 C# datatable

问题描述 <?xmlversion="1.0"encoding="UTF-8"?>-<root>-<setting><itemname="pageCount">20</item><itemname="pageCountList">5;10;20;50;100</item></setting>-<metadatacategory

DataTable和Xml互相转化

需求 Sql表查询得到的DataTable要转化成XML,就顺便写个测试的例子, 实现的功能 利用反射实现了DataTable,实体对象,XML的互转. 达到的效果 Git代码:https://git.oschina.net/dingxiaowei/XMLConvertor.git 在线查看代码:https://git.oschina.net/dingxiaowei/XMLConvertor#git-readme Code: sql if exists (select * from sysobj