c# - 将 JSON 转换为基于另一个属性的对象
问题描述
我正在编写一些模型并为其分配JsonProperty
属性,以便我可以使用Newtonsoft.Json
. 我的问题是我的 Laravel 后端返回的是多态关系,因此这意味着我的属性可以是动态类型。
由用户拥有:
{
"id": 1,
"owner_id": 1,
"owner_type": "App\\Models\\User",
"created_at": "2019-04-21 08:57:53",
"updated_at": "2019-04-21 08:57:53",
"owner": {
"id": 1,
"username": "testuser",
"email": "test123@mail.com",
"email_verified_at": null,
"created_at": "2019-04-20 10:23:50",
"updated_at": "2019-04-20 10:23:50"
}
}
由一个团体拥有:
{
"id": 1,
"owner_id": 1,
"owner_type": "App\\Models\\Group",
"created_at": "2019-04-21 08:57:53",
"updated_at": "2019-04-21 08:57:53",
"owner": {
"id": 1,
"name": "Administration",
"created_at": "2019-04-01 00:00:00",
"updated_at": "2019-04-01 00:00:00",
"color": {
"id": 52,
"hex": "#426D42",
"created_at": null,
"updated_at": null
}
}
}
我正在尝试将 映射owner
到我的 C# 项目中的适当模型类。主要型号为Vehicle
:
using Newtonsoft.Json;
namespace OmegaAPI.Models
{
public class Vehicle
{
[JsonProperty("owner_type")]
private string OwnerType { get; set; }
[JsonProperty("owner")]
public object Owner { get; set; }
}
}
例如,我有User
可以Group
是Vehicle
. 如何使用该属性转换owner
为适当的模型类?OwnerType
解决方案
只是反序列化为动态。您可以使用 ExpandoObject 获得所需的内容。
var converter = new ExpandoObjectConverter();
dynamic customer1 = JsonConvert.DeserializeObject<ExpandoObject>(jsonString, converter);
Console.WriteLine(customer1.owner.username);
推荐阅读
- wordpress - 如何使用 AWS LightSail 分发配置 WordPress 301 重定向?
- php - php工匠队列:工作命令不起作用
- statistics - 是否有一个回归包可以自动找到自变量中的最佳领先和滞后?
- adsense - 由于恶意或不需要的外部链接,Google Ads 拒绝了我们的网站,但我们在任何地方都找不到提到的链接 (debysale.com)
- typescript - ts-node 将 typeorm 中的 createConnection 转换为 (0, typeorm_1.createConnection)
- mvvm - 模拟 Microsoft.Toolkit.Mvvm.IMessenger
- shell - 在 systemd 服务上运行 gui 应用程序时出错
- assembly - 存储到内存和从内存中加载是如何工作的;存储 32 位字时,哪些地址会受到影响?
- spring-boot - 套接字超时在 Rest 模板第三方 API 调用中不起作用 - Spring boot
- javascript - SyntaxError:不能在模块外使用 import 语句(用于 React 中的单元测试)