servicestack-text - ServiceStack.Text FromJson 和 EmitLowercaseUnderscoreNames
问题描述
我调用的第三方以小写和下划线返回对象,例如
{ "token_type":"bearer", "access_token":"blahblah", "expires_in":3600, "scope":"rsp" }
我想将其反序列化为 Pascal 案例样式类,例如
public class OAuthResponse
{
public string TokenType { get; set; }
public string AccessToken { get; set; }
public int ExpiresIn { get; set; }
public string Scope { get; set; }
}
我已经尝试为此设置自定义范围,但它不起作用。这是一个失败的测试:
[Fact]
public void ShouldDeserializeUsingScope()
{
// Arrange
using (var scope = JsConfig.BeginScope())
{
scope.EmitLowercaseUnderscoreNames = true;
scope.EmitCamelCaseNames = false;
var response = "{ \"token_type\":\"bearer\", \"access_token\":\"blahblah\", \"expires_in\":3600, \"scope\":\"rsp\" }";
// Act
var oAuthResponse = response.FromJson<OAuthResponse>();
// Assert
Assert.Equal("rsp", oAuthResponse.Scope);
Assert.Equal("blahblah", oAuthResponse.AccessToken); // it fails on this line
}
}
如何自定义反序列化?
解决方案
尝试使用以下
using (JsConfig.With(emitLowercaseUnderscoreNames: true, propertyConvention: PropertyConvention.Lenient))
{
var OAuthResponseDto = JsonSerializer.DeserializeFromString<OAuthResponse>(JsonResponse);
}
推荐阅读
- reactjs - 静态文件、aspnet 核心 AddSpaStaticFiles roothpath、SPA 模板的 404 错误
- javascript - 鼠标悬停
- python - 创建 Slack 应用程序时出现 Python 语法错误
- vba - DoCmd.TransferText 将文本四舍五入为整数
- google-apps-script - 将单元格与命名范围进行比较以进行条件格式设置
- c# - 如何在c#中将excel值设置为datagrid?
- java - 将位置与数组中的上一个/下一个位置进行比较
- git - 是什么阻止我在管道中使用 $_?
- excel - 如何使用 Katalon Studio 将 Excel 文件与网页进行比较?
- c# - 创建自定义窗口输出设备