2014-10-31 105 views
0

我有一個像的WebAPI方法,從而帶來:的WebAPI調用的XML命名空間,導致反序列化失敗

[HttpPost, Route("api/student/studentstatus")] 
public UpdatedStudent StudentStatus(HttpRequestMessage request) 
{ 
    string requestData = request.Content.ReadAsStringAsync().Result; 
    GetStudentStatus scp = null; 
    XmlSerializer serializer = new XmlSerializer(typeof(GetStudentStatus), new XmlRootAttribute("GetStudentStatus")); 
    using (Stream stream = request.Content.ReadAsStreamAsync().Result) 
    { 
     scp = (GetStudentStatus)serializer.Deserialize(stream); 
    } 
} 

這是的RequestData字符串

<GetStudentStatus xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/StudentStatusConsole"> 
<StudentID></StudentID><Batch></Batch> 
</GetStudentStatus> 

當StudentStatus被擊中死了在這個錯誤的Deserialize部分:

"<GetStudentStatus xmlns='http://schemas.datacontract.org/2004/07/StudentStatusConsole'> was not expected."} 

這是GetStudentStatus類:

public class GetStudentStatus 
{ 
    public string StudentID { get; set; } 
    public string Batch { get; set; } 
} 

試圖與DataContract空間(namespace = 「」)和添加數據成員屬性的屬性來註釋的類。 不行。

這是調用的WebAPI的方法:

using (var client = new HttpClient()) 
{ 
    GetStudentStatus studentToPost = new GetStudentStatus() { StudentID = "", Batch = "" }; 
    client.BaseAddress = new Uri("http://localhost:53247/"); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml")); 

    HttpResponseMessage response = await client.PostAsXmlAsync("api/student/studentstatus", studentToPost); 
} 

任何幫助不勝感激。

回答

0

嘗試使用DataContract屬性註釋您的GetStudentStatus類,但指定Namespace屬性以便它包含該類所在的命名空間。

[DataContract(Name = "GetStudentStatus", Namespace = "http://schemas.datacontract.org/2004/07/[NameSpace]")] 
public class GetStudentStatus 
{ 
    public string StudentID { get; set; } 
    public string Batch { get; set; } 
} 
相關問題