使用NewtonJson时ShopifySharp的Order部分属性映射失败问题
ShopifySharp Order实体类属性映射失败问题
使用ShopifySharp库的Order实体类映射Shopify订单JSON数据时,仅Id属性映射正常,AdminGraphQLAPIId、AppId等属性始终无法映射成功,相关代码及信息如下:
实体类代码
public class Order { [JsonProperty("id")] public long? Id { get; set; } [JsonProperty("admin_graphql_api_id")] public string AdminGraphQLAPIId { get; set; } [JsonProperty("app_id")] public long? AppId { get; set; } }
JSON示例数据
{ "id": 4538882687054, "admin_graphql_api_id": "gid://shopify/Order/4538882687054", "app_id": 1354745 }
控制器代码
[Route("api/[controller]")] [ApiController] public class OrderController : ControllerBase { [HttpPost] [Route("Order")] public IActionResult Order(Order order) { return Ok(order); } }
问题原因
ASP.NET Core默认使用System.Text.Json进行序列化/反序列化,但ShopifySharp实体类中使用的是Newtonsoft.Json的[JsonProperty]特性,System.Text.Json并不识别该特性,导致除了名称完全匹配的Id外,其他带下划线的属性无法映射。
解决办法
办法1:为实体类添加System.Text.Json特性
修改Order实体类,同时保留原有的[JsonProperty](兼容ShopifySharp),新增[JsonPropertyName]特性(适配ASP.NET Core默认序列化器):
public class Order { [JsonProperty("id")] [JsonPropertyName("id")] public long? Id { get; set; } [JsonProperty("admin_graphql_api_id")] [JsonPropertyName("admin_graphql_api_id")] public string AdminGraphQLAPIId { get; set; } [JsonProperty("app_id")] [JsonPropertyName("app_id")] public long? AppId { get; set; } }
办法2:配置ASP.NET Core使用Newtonsoft.Json作为默认序列化器
- 安装NuGet包
Microsoft.AspNetCore.Mvc.NewtonsoftJson - 在
Program.cs中添加配置:
builder.Services.AddControllers() .AddNewtonsoftJson();
这样项目就会使用Newtonsoft.Json处理序列化,ShopifySharp的[JsonProperty]特性就能正常生效。
内容的提问来源于stack exchange,提问作者Saghar Francis
相关产品推荐
相关产品推荐

