【发布时间】:2014-04-26 06:20:59
【问题描述】:
由于我不会进入这里的原因,我不能将对象类型用作我的 webapi 控制器的参数。因此,我需要想办法使用 XmlDocument 或类似的方法将 xml 对象反序列化为我的 c# 对象。
这是我目前所拥有的:
public void Post(HttpRequestMessage request)
{
var xmlDoc = new XmlDocument();
xmlDoc.Load(request.Content.ReadAsStreamAsync().Result);
using (XmlReader xmlReader = new XmlNodeReader(xmlDoc))
{
Object obj = new XmlSerializer(typeof(myObject)).Deserialize(xmlReader);
myObject scp = (myObject)obj;
}
}
不幸的是,这会引发错误。谁能提供一些关于如何将我的 xml 反序列化为我的对象的建议?
tia
编辑:这是我要反序列化的 xml:
<Student>
<studentid>1234</studentid>
<command>post</command>
<posttype>charge</posttype>
<transaction_description>This is a test post to the web api</transaction_description>
<payment_type>CC</payment_type>
<term_code>2013SPRING</term_code>
<amount>432.75</amount>
</Student>
这是我得到的错误:
System.InvalidOperationException:不是预期的。 生成时间:格林威治标准时间 2014 年 3 月 19 日星期三 20:18:58
System.InvalidOperationException:XML 文档中存在错误 (1, 2)。 ---> System.InvalidOperationException: 是 没想到。在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderStudentChargePost.Read3_StudentChargePost() --- 内部异常堆栈跟踪结束 --- 在 System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader、字符串 encodingStyle、XmlDeserializationEvents 事件)
在 System.Xml.Serialization.XmlSerializer.Deserialize(Stream 流)
在 CashNetSSO.Controllers.API.StudentInformationPostController.Post(HttpRequestMessage 请求)在 C:\Projects\CashNetSSO\Development\CashNetSSO\CashNetSSO\Controllers\API\StudentInformationPostController.cs:line 23 at lambda_method(Closure, Object, Object[]) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.c_DisplayClassf.b_9(Object 实例,对象 [] 方法参数)在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(对象 实例,对象 [] 参数)在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.c_DisplayClass5.b_4() 在 System.Threading.Tasks.TaskHelpers.RunSynchronously [TResult](Func`1 func, CancellationToken cancelToken)
【问题讨论】:
标签: c# deserialization xmldocument xmlreader