DataContractSerializer не смог де-сериализовать все свойства в Net Core 2

LP13 спросил: 03 февраля 2018 в 10:22 в: .net-core

Я пытаюсь де-сериализовать xml в известный объект, используя DataContractSerializer в .NET Core 2.

Вот мой xml. (У меня нет контроля над xml. Вот как я получаю XML как ответ на некоторый метод api). Для целей тестирования я захватил xml и поместил в xml-файл.

<Response>
  <ClientID>TestClient</ClientID>
  <FileName>E:\MyData\20180223084535390PM.xml</FileName>
  <UploadStatus>Succeeded</UploadStatus>
  <UploadMessage>Imported Successfully</UploadMessage>
  <ConfirmationNumber>0abcb25f2675</ConfirmationNumber>
  <ImportTime>2018-02-23T15:48:01.887</ImportTime>
  <StartTime>2018-02-23T15:48:03.113</StartTime>
  <EndTime>2018-02-23T15:53:14.76</EndTime>
  <Count>6</Count>
  <Amount>3446.3500</Amount>
  <Messages />
</Response>

Мой соответствующий объект C #

[DataContract(Name = "Response", Namespace = "")]
public class MyResponse
{
    [DataMember]
    public string ClientID { get; set; }    [DataMember]
    public string FileName { get; set; }    [DataMember]
    public string UploadStatus { get; set; }    [DataMember]
    public string UploadMessage { get; set; }    [DataMember]
    public string ConfirmationNumber { get; set; }    [DataMember]
    public DateTime? ImportTime { get; set; }    [DataMember]
    public DateTime? StartTime { get; set; }    [DataMember]
    public DateTime? EndTime { get; set; }    [DataMember]
    public int? Count { get; set; }    [DataMember]
    public decimal? Amount { get; set; }    [DataMember]
    public string Messages { get; set; }    
}

Код де-сериализации

    [Fact]
    public void TestDeSerialize()
    {
        var file = AppDomain.CurrentDomain.BaseDirectory + "Data\\test.xml";
        var serializer = new System.Runtime.Serialization.DataContractSerializer(typeof(MyResponse));
        MyResponse result = null;
        using (var fs = new FileStream(file, FileMode.Open, FileAccess.Read))
        {
            result = (MyResponse)serializer.ReadObject(fs);
        }
    }

Однако, когда он де-сериализует xml в объект, большинство свойств объекта имеют NULL, даже если они имеют соответствующие значения в файле XML. См. "Быстрый просмотр" ниже.

Я не уверен, что я здесь отсутствует

p> Обновление 1
Обратите внимание, что, когда я заменяю DataContract и DataMember атрибуты XmlRoot и XmlElement, а затем де-сериализуйте xml с помощью XmlSerializer, тогда в результирующем объекте будут заполнены все свойства. Таким образом, он работает с XmlSerializer, но не с DataContractSerializer .
Я хотел бы использовать DataContractSerializer

0 ответов