Newtonsoft.Json.JsonConvert.SerializeObject
- это не универсальный метод, поэтому он анализирует предоставленный объект во время выполнения и сериализует все свойства, которыми обладает объект.
Для сравнения System.Text.Json.JsonSerializer.Serialize(p)
разрешается на универсальный метод . Компилятор выводит параметры типа на основе типа переменной, в случае вашей же IName
. Поэтому метод анализирует предоставленный тип и экспортирует свойства параметра универсального типа, а не все свойства объекта, реализующего интерфейс.
Документация показывает, что методу сериализации всегда нужно указывать тип, либо через параметр универсального типа, либо в качестве параметра метода.
Следующий код должен исправить поведение:
var s1 = System.Text.Json.JsonSerializer.Serialize(p, p.GetType());
// --> {"Name":"Waldo","Age":4}
См. Этот образец .