Deserialisieren von xml zu einem Objekt aus webapi
Aus Gründen, die ich nicht' gehen in hier, ich kann nicht, verwenden Sie den Objekt-Typ als parameter in meine webapi controller. Also, ich muss herausfinden, einen Weg zu Deserialisieren des xml-Objekt in mein c# - Objekt mithilfe von XmlDocument, oder etwas ähnliches.
Hier ist, was ich habe, so weit:
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;
}
}
leider wirft Fehler. Kann jemand geben einige Anregung, wie kann ich meine xml-Deserialisieren in meinem Objekt?
tia
Edit: hier ist das xml, das ich versuche zu Deserialisieren:
<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>
und hier ist der Fehler, die ich immer bin:
System.InvalidOperationException: war nicht zu erwarten.
Generiert: Wed, 19 Mar 2014 20:18:58 GMTSystem.InvalidOperationException: Es ist ein Fehler in XML-Dokument
(1, 2). ---> System.InvalidOperationException: war
nicht zu erwarten. bei
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderStudentChargepost.Read3_StudentChargePost()
--- Ende der inneren Ausnahme-stack-trace - - - at System.Xml.Serialisierung.XmlSerializer.Deserialisieren(XmlReader
xmlReader, String encodingStyle, XmlDeserializationEvents Ereignisse)
System.Xml.Serialisierung.XmlSerializer.Deserialisieren(Stream stream)
bei
CashNetSSO.Controller.API.StudentInformationPostController.Post(HttpRequestMessage
Anfrage)
C:\Projects\CashNetSSO\Development\CashNetSSO\CashNetSSO\Controllers\API\StudentInformationPostController.cs:line
23 bei lambda_method(Schließung , Objekt , Object[] ) bei
System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c_DisplayClassf.b_9(Objekt
Instanz, Object[] methodParameters) bei
System.Web.Http.Controller.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object
Instanz, Object[] arguments) bei
System.Web.Http.Controller.ReflectedHttpActionDescriptor.<>c_DisplayClass5.b_4()
System.Threading.Aufgaben.TaskHelpers.RunSynchronously[TResult](Func`1
func, CancellationToken cancellationToken)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie bereits das Lesen der Inhalte als stream können Sie das folgende tun:
Edit:
Der Grund, Sie sind immer der Fehler ist, da der XmlSerializer erwartet eine xml-Deklaration-tag. Wenn Ihr xml nicht enthalten, diese können Sie definieren, das root-Attribut wie folgt: