c# - 使用 System.Text.Json 反序列化不可变记录数组
问题描述
假设我们有这些记录:
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; }
}
而这个 XUnit 测试:
[Fact]
public void QuoteChartResponseFakeDeserializationTest()
{
var data = @"{""quotes"": [ { ""o"": { ""bid"": 1.1 } } ] }";
var result = System.Text.Json.JsonSerializer.Deserialize<ResponseFake>(data);
result.Quotes.Should().NotBeEmpty();
}
测试失败并出现错误“预期结果。引号不为空,但已找到。”
我应该怎么做才能获得Quotes
人口?
解决方案
解决方案是添加JsonSerializerOptions
.PropertyNamingPolicy
var options = new JsonSerializerOptions()
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};
var result = System.Text.Json.JsonSerializer.Deserialize<ResponseFake>(data, options);
推荐阅读
- c - 在 C 中计算时间复杂度
- android - 使用 kotlin 的房间实现我遇到了错误
- java - 为什么我的递归方法基本案例没有返回应有的布尔值?
- regex - 如何使用正则表达式选择多行并在找到字符后结束字符串?
- java - 如何使用 Spring MVC 和 Pebble 模板引擎将 Java 对象绑定到 HTML 表单
- c# - 如何将组合框数据库值链接到文本框?
- typescript - 打字稿中的自定义全局变量
- ios - iOS 14 中安全文本字段中的项目符号大小显示有点大
- c# - class_name + object_name = new + class_name 与只输入“new + class_name”:有什么区别?
- python - 使用 pytest 对泡菜文件进行单元测试的正确方法是什么?