Json Ошибка десериализации при десериализации сложного объекта - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь провести юнит-тестирование моего метода. Но в процессе мне пришлось десериализовать следующий объект. У объекта есть много других свойств, которые являются сложными типами, но для моего требования следующее заключается в том, как я инициализирую свойства.

List<ClueResponse> clueResponses = new List<ClueResponse>
{
            new ClueResponse
            {
                ReportInfo=new ThirdPartyReportInfo
                {
                    ReportRequestDtTm = DateTime.Today,
                    ReportReceivedDtTm = DateTime.Today,
                    ReportReferenceNumber = "12345"
                },
                State="IN"
            }
};

Этот объект устанавливается в Содержимое HttpResponse и после этого он десериализуется.

HttpResponseMessage response = new HttpResponseMessage
{
 Content = new ObjectContent<List<ClueResponse>>(clueResponses,new JsonMediaTypeFormatter())
};
_mockedBaseApiClient.Setup(m => m.GetAsync("PolicyApi", It.IsAny<string>()))
            .ReturnsAsync(response);

Десериализация - это метод расширения HttpResponseMessage как

public static async Task<TResult> Deserialize<TResult>(this HttpResponseMessage response)
{
        try
        {
            using (Stream stream = await response.Content.ReadAsStreamAsync())
            using (StreamReader streamReader = new StreamReader(stream))
            using (JsonReader textReader = new JsonTextReader(streamReader))
            {
                JsonSerializer serializer = new JsonSerializer
                {
                    NullValueHandling = NullValueHandling.Ignore,
                    MissingMemberHandling = MissingMemberHandling.Ignore,
                };
                return serializer.Deserialize<TResult>(textReader);
            }
        }
        catch (Exception ex)
        {
            ex.Data.Add("StatusCode", response.StatusCode);
            ex.Data.Add("ReasonPhrase", response.ReasonPhrase);
            throw new SerializationException("Failed to deserialize", ex);
        }
}

Но после десериализации я не могу правильно десериализовать объект. Я получаю все нулевые значения для всех свойств, даже для ReportInfo

var clueResponses= await clueResponseMessage.Deserialize<List<ClueResponse>>();

Содержимое десериализуется в Список, но каждый объект Clue имеет все свойства null.

...