我想在 .NET Core Web API 3.0.0 上显式使用遗留库进行序列化/反序列化。 Newtonsoft.Json无论我做什么,总是System.Text.Json涉及并且不使用定制的 Newtonsoft 转换器。
ConfigureServices中的方法startup.cs看起来像这样:
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddControllers()
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
options.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto;
options.SerializerSettings.Converters.Add(new CustomGeoJsonConverter());
}
);
// ...
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我尝试使用自定义CustomGeoJsonConverter,并且在序列化时,该对象中没有任何活动。类似的代码在 .NET Core 2.2 中运行正常。
Net Topology Suite 2.0 版本发生了什么?我的主要考虑是:
ICoordinateSystem(如何使用 NTS 将几何图形从一个坐标系转换到另一个坐标系)?我想将配置绑定到记录类型。
这是配置类型的定义(它没有无参数构造函数):
public record AppConfiguration(string ConnectionString);
Run Code Online (Sandbox Code Playgroud)
这是示例Main方法:
public static void Main(string[] args)
{
var configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
AppConfiguration appConfig = new(); // error
configuration.GetSection("app").Bind(appConfig);
}
Run Code Online (Sandbox Code Playgroud)
如果我将定义转换为:
public record AppConfiguration
{
public string ConnectionString {get; init;}
}
Run Code Online (Sandbox Code Playgroud)
它按预期工作,但我宁愿使用记录的“单行”定义。这个用例的记录是正确的吗?
假设我们有这些记录:
public record ResponseFake
{
[JsonConstructor]
public ResponseFake(OhlcFake[] quotes)
{
Quotes = quotes;
}
public OhlcFake[] Quotes { get; }
}
public record OhlcFake
{
[JsonConstructor]
public OhlcFake(QuoteFake o)
{
O = o;
}
public QuoteFake O { get; }
}
public record QuoteFake
{
[JsonConstructor]
public QuoteFake(decimal bid)
{
Bid = bid;
}
public decimal Bid { get; }
}
Run Code Online (Sandbox Code Playgroud)
这个 XUnit 测试:
[Fact]
public void QuoteChartResponseFakeDeserializationTest()
{
var data = @"{""quotes"": [ { ""o"": { ""bid"": 1.1 } …Run Code Online (Sandbox Code Playgroud) 有没有办法用记录创建库,然后在旧的.NET Framework 4.x 应用程序中使用它?