C# 从webapi将xml反序列化为对象

C# 从webapi将xml反序列化为对象,c#,deserialization,xmldocument,xmlreader,C#,Deserialization,Xmldocument,Xmlreader,由于我不想在这里讨论的原因,我不能将对象类型用作webapi控制器的参数。因此,我需要找到一种方法,使用XmlDocument或类似的东西将xml对象反序列化为我的c#对象 以下是我目前掌握的情况: public void Post(HttpRequestMessage request) { var xmlDoc = new XmlDocument(); xmlDoc.Load(request.Content.ReadAsStreamAsync()

由于我不想在这里讨论的原因,我不能将对象类型用作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反序列化到对象中

短暂性脑缺血发作

编辑:以下是我试图反序列化的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>

1234
邮递
要价
这是web api的测试文章
科科斯群岛
2013年春天
432.75
下面是我得到的错误:

System.InvalidOperationException:不应为。 生成时间:2014年3月19日星期三20:18:58 GMT

System.InvalidOperationException:XML文档中存在错误 (1, 2). ---> System.InvalidOperationException:是 没有预料到。在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderStudentChargePost.Read3_StudentChargePost() ---内部异常堆栈跟踪结束---位于System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader、字符串编码样式、XmlDeserializationEvents)
在System.Xml.Serialization.XmlSerializer.Deserialize(流)
在 CashNetSSO.Controllers.API.StudentInformationPostController.Post(HttpRequestMessage 请求)在 C:\Projects\cashnetso\Development\cashnetso\cashnetso\Controllers\API\StudentInformationPostController.cs:line 23 at lambda_方法(闭包、对象、对象[])at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.c_DisplayClassf.b_9(对象 实例,对象[]方法参数)位于 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 CancellationToken)


如果您已将内容作为流读取,则可以执行以下操作:

    myObject scp = null;
    XmlSerializer serializer = new XmlSerializer(typeof(myObject);
    using (Stream stream = request.Content.ReadAsStreamAsync().Result)
    {
        scp = serializer.Deserialize(stream);
    }
编辑:

出现错误的原因是XmlSerializer需要一个xml声明标记。如果您的xml不包含此项,则可以定义根属性,如下所示:

    XmlSerializer serializer = new XmlSerializer(typeof(myObject), new XmlRootAttribute("Student"));

如果您已将内容作为流读取,则可以执行以下操作:

    myObject scp = null;
    XmlSerializer serializer = new XmlSerializer(typeof(myObject);
    using (Stream stream = request.Content.ReadAsStreamAsync().Result)
    {
        scp = serializer.Deserialize(stream);
    }
编辑:

出现错误的原因是XmlSerializer需要一个xml声明标记。如果您的xml不包含此项,则可以定义根属性,如下所示:

    XmlSerializer serializer = new XmlSerializer(typeof(myObject), new XmlRootAttribute("Student"));

我还是会出错。我已经用发送的xml和收到的错误更新了OP。我仍然收到一个错误。我已经用发送的xml和收到的错误更新了OP。