ฉันกำลังทำการดีซีเรียลไลซ์ข้อมูลที่ได้รับจากบริการบนเว็บ
ปัญหาคือว่าการดีซีเรียลไลซ์ของรายการส่งคืนรายการว่างและไม่มีการสร้างข้อยกเว้น คุณช่วยฉันหาสาเหตุได้ไหม เราได้ลองใช้ไวยากรณ์ที่เป็นไปได้หลายประการ โค้ดด้านล่างนี้ใกล้เคียงกับโซลูชันที่ถูกต้องมากที่สุด แต่เราไม่สามารถดีซีเรียลไลซ์ให้เป็นรายการคลาสได้อย่างถูกต้อง
<ArrayOfBatch xmlns="http://schemas.datacontract.org/2004/07/myns" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<MaasBatch>
<BatchName>All Users</BatchName>
<Users>
<MaasUsers>
<firstName>bob</firstName>
<lastName>thetest</lastName>
<sourceEmail>[email protected]</sourceEmail>
<sourceTenantID>111</sourceTenantID>
<targetEmail>[email protected]</targetEmail>
<targetTenantID>222</targetTenantID>
</MaasUsers>
</Users>
</MaasBatch>
</ArrayOfBatch>
รหัส:
List<MAASBatch> lstMaasBatches = null;
try
{
string target = string.Empty;
using (var response = request.GetResponse())
{
Stream streamReader = response.GetResponseStream();
DataContractSerializer serializer = new DataContractSerializer(typeof(List<MAASBatch>));
lstMaasBatches = (List<MAASBatch>)serializer.ReadObject(streamReader);
streamReader.Close();
}
return lstMaasBatches;
}
catch (Exception exc)
{
return lstMaasBatches;
}
ระดับ:
[DataContract(Name = "MAASBatch", Namespace = "http://schemas.datacontract.org/2004/07/myns")]
[KnownType(typeof(MAASUsers))]
public class MAASBatch
{
[DataMember]
public string BatchName { get; set; }
[DataMember]
public List<MAASUsers> Users { get; set; }
[OnDeserializing]
internal void OnDeserializingCallBack(StreamingContext streamingContext)
{
this.Users = new List<MAASUsers>();
}
}
[DataContract(Name = "MAASUsers", Namespace = "http://schemas.datacontract.org/2004/07/myns")]
public class MAASUsers
{
[DataMember]
public string firstName { get; set; }
[DataMember]
public string lastName { get; set; }
[DataMember]
public string sourceEmail { get; set; }
[DataMember]
public int sourceAgentID { get; set; }
[DataMember]
public string targetEmail { get; set; }
[DataMember]
public int targetAgentID { get; set; }
}