В настоящее время я работаю над включением необнуляемых ссылочных типов для моего. net core api.
Проблема в том, что при попытке выполнить десериализациюObject не происходит интеграция, поскольку в нем нет пустого конструктора. У меня не может быть пустого конструктора, потому что это сделает свойство: возможным пустым .
Проблема:
JsonConvert.DeserializeObject<ViewModel>(result);
вызывает конструктор, который имеет конструктор с Аргумент объекта ViewModel(Model model)
. В тесте это ноль.
Я сделал простой пример:
API:
public class Dog
{
public string Name { get; set; } = null!;
}
public class DogViewModel
{
public DogViewModel(Dog dog)
{
Name = dog.Name;
}
public string Name { get; set; }
}
[HttpGet]
[Route("dog")]
public DogViewModel GetDog()
{
var dog = new Dog
{
Name = "Fido"
};
return new DogViewModel(dog);
}
Это работает, когда я использую клиент вызывает API, но он не проходит тесты:
Test
[Fact]
public async Task GetDog()
{
var response = await Client.GetAsync("dog");
var result = response.Content.ReadAsStringAsync().Result;
Assert.True(response.IsSuccessStatusCode, result);
var responeseAsObject = JsonConvert.DeserializeObject<DogViewModel>(result); <----- this is where it breaks
Assert.IsType<string>(responeseAsObject.Name);
Assert.NotNull(responeseAsObject);
}
JsonConvert.DeserializeObject вызывает конструктор DogViewModel; DogViewModel (Dog dog), но собака нулевая.