Я использую этот преобразователь контрактов для внедрения зависимостей с Autofac
и Json.NET
:
public class AutofacContractResolver : DefaultContractResolver
{
private readonly IComponentContext _container;
public AutofacContractResolver(IComponentContext context)
{
_container = context ?? throw new ArgumentNullException(nameof(context));
}
protected override JsonObjectContract CreateObjectContract(Type objectType)
{
var contract = base.CreateObjectContract(objectType);
// use Autofac to create types that have been registered with it
if (_container.IsRegistered(objectType))
{
contract.DefaultCreator = () => _container.Resolve(objectType);
}
return contract;
}
}
Затем я использую его с DI для инициализации JsonSerializer
:
var contractResolver = ctx.Resolve<IContractResolver>(); // ctx = Autofac's IComponentContext
var jsonSerializer = new JsonSerializer
{
ContractResolver = contractResolver, // <-- AutofacContractResolver
};
Что было бы эквивалентом этого метода с новым System.Text.Json в net-core-3.0
- если они уже есть? Я не смог это понять и не смог найти никаких интерфейсов, которые были бы похожи на эти.
System.Text.Json
- _ 2_ и _ 3_ - являются внутренними. Существует открытое усовершенствование эквивалент DefaultContractResolver в System.Text.Json # 42001 с запросом общественный эквивалент. - person dbc   schedule 26.11.2019