Tôi gặp sự cố với DataContractSerializer
. Tôi sử dụng nó để tạo ra các cá thể lớp từ XML được trả về bởi ASP.NET Web Service. Nhưng thực sự nguồn dữ liệu không quan trọng ở đây. Để làm cho toàn bộ trường hợp dễ dàng hơn để gỡ lỗi tôi đã tạo ra một dự án thử nghiệm đơn giản chỉ với serialization và vấn đề vẫn còn xảy ra.Một số thuộc tính không được deserialized bằng cách sử dụng DataContractSerializer
Đây là XML của tôi:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<GetTestURL p1:type="MyApp.GetTestUrlInfo" xmlns:p1="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">
<TestURL>http://bing.com</TestURL>
<UserCount p1:type="Edm.Int32">1</UserCount>
<InitialCount p1:type="Edm.Int32">1</InitialCount>
<AverageExecutionTime p1:type="Edm.Int32">43</AverageExecutionTime>
</GetTestURL>
Lớp tôi đang cố gắng để deserialize XML để:
[DataContract(Name = "GetTestURL", Namespace = "http://schemas.microsoft.com/ado/2007/08/dataservices")]
public class TestInfo
{
[DataMember(Name = "TestURL")]
public Uri TestUri { get; private set; }
[DataMember(Name = "UserCount")]
public int UserCount { get; private set; }
[DataMember(Name = "InitialCount")]
public int InitialCount { get; private set; }
[DataMember(Name = "AverageExecutionTime")]
public int AverageExecutionTime { get; private set; }
}
Và serialization lớp helper của tôi: Mã
public static class SerializationHelper<T>
{
private static DataContractSerializer _serializer = new DataContractSerializer(typeof(T));
public static T Deserialize(Stream source)
{
return (T)_serializer.ReadObject(source);
}
}
kiểm tra:
// Test program
public static void Main()
{
TestInfo info = null;
using (var stream = File.Open("Input.xml", FileMode.Open, FileAccess.Read))
{
info = SerializationHelper<TestInfo>.Deserialize(stream);
}
}
Sau khi thiết lập brakepoint ở phần cuối của phương pháp này tôi thấy như sau:
Như bạn có thể thấy, cả hai AverageExecutionTime
và InitialCount
không deserialized và có int
giá trị mặc định. Họ nên đặt thành 43
và 1
, bởi vì các giá trị này nằm trong XML.
Nó thậm chí còn lạ lùng hơn với tôi, rằng bất động sản UserCount
được thực hiện đúng, nhưng thực sự nó không khác biệt chút nào so với cả hai không hoạt động chút nào. Điều duy nhất khác biệt là tên phần tử.
có thể lặp lại http://stackoverflow.com/questions/15413468/deserializing-xml-with-datacontractserializer?rq=1 –