2014-03-19 6 views
1

여기에 들어가 려하지 않는 이유 때문에 객체 유형을 webapi 컨트롤러에 매개 변수로 사용할 수 없습니다. 따라서 XmlDocument 등을 사용하여 xml 객체를 내 C# 객체로 비 직렬화하는 방법을 찾아야합니다.xml을 webapi에서 객체에 비 병렬화

는 여기에 지금까지이 작업은 다음과 같습니다

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을 deserialize 할 수있는 방법에 대한 제안을 제공 할 수 있습니까?

TIA

는 편집이 : 여기에 내가 역 직렬화하기 위해 노력하고있어 XML의 :

System.InvalidOperationException : 여기

<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> 

을하고 내가지고있어 오류가있어 예상되지 않았습니다 . 생성 : 2014 년 3 월 19 일 20:18:58 GMT

System.InvalidOperationException : XML 문서 (1, 2)에 오류가 있습니다. ---> System.InvalidOperationException : 않았습니다. System.Xml.Serialization.XmlSerializer.Deserialize에서 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderStudentChargePost.Read3_StudentChargePost() 내부 예외 스택 추적 --- 끝 --- (XmlReader를 XMLReader를, 문자열 인코딩 스타일, XmlDeserializationEvents 이벤트)에서
C에서 CashNetSSO.Controllers.API.StudentInformationPostController.Post (HttpRequestMessage 요청)에서 System.Xml.Serialization.XmlSerializer.Deserialize (스트림 스트림)
에서 : 컨트롤러 \ 프로젝트 \ \ CashNetSSO \ 개발 \ CashNetSSO \ CashNetSSO \ API \ StudentInformationPostController.cs : 23시 lambda_method (Closure, Object, Object []) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor. System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute에서 <> C_ DisplayClassf.b _9 (오브젝트 인스턴스 [] 오브젝트 methodParameters) System.Web에서 (오브젝트 인스턴스 [] 인수 개체). Http.Controllers.ReflectedHttpActionDescriptor. <> C_ DisplayClass5.b _4() System.Threading.Tasks.TaskHelpers.RunSynchronously [TResult]에서 (Func`1 FUNC, CancellationToken cancellationToken)

답변

3

이미 같은 내용을 읽는 경우 다음 작업을 수행 할 수있는 스트리밍 :

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

편집 :

당신이 오류가 발생하는 이유는 내지 Xm 때문이다 lSerializer가 xml 선언 태그를 기다리고 있습니다. xml에 여기에 포함되지 않은 루트 속성을 정의 할 수 있습니다.

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

오류가 계속 발생합니다. 보내고있는 XML과받은 오류로 OP를 업데이트했습니다. –

+0

@ChristopherJohnson, 대답을 업데이트했습니다. –

+0

완벽한 ... 감사합니다. –