第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 JSON 轉(zhuǎn)換為基于另一個屬性的對象

將 JSON 轉(zhuǎn)換為基于另一個屬性的對象

C#
慕桂英546537 2022-12-24 10:38:41
我正在編寫一些模型并為它們分配JsonProperty屬性,以便我可以使用Newtonsoft.Json. 我的問題是我的 Laravel 后端返回多態(tài)關(guān)系,所以這意味著我的屬性可以是動態(tài)類型。由用戶擁有:{    "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# 項目中的適當(dāng)模型類。主要型號是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. 如何使用該屬性轉(zhuǎn)換owner為適當(dāng)?shù)哪P皖??OwnerType
查看完整描述

2 回答

?
慕絲7291255

TA貢獻(xiàn)1859條經(jīng)驗 獲得超6個贊

1)您需要創(chuàng)建一個枚舉,其中包含owner_type在 json中具有價值的所有可能成員


[JsonConverter(typeof(StringEnumConverter))]

public enum EnumOwnerType

{

    [EnumMember(Value = "App\\Models\\User")]

    User,

    [EnumMember(Value = "App\\Models\\Group")]

    Group

}

您需要添加對項目的引用以進(jìn)行組裝System.Runtime.Serialization,并且在您的程序中您必須導(dǎo)入一些名稱空間,例如

2)修改你的Vehicle類如下

public class Vehicle

{

    [JsonProperty("owner_type")]

    public EnumOwnerType OwnerType { get; set; }


    [JsonProperty("owner")]

    public JObject Owner { get; set; }

}

在以上類別中的屬性


OwnerType是類型EnumOwnerType。

Owner是類型JObject。

3)這是您的示例模型User


class User

{

    public int id { get; set; }

    public string  username { get; set; }

    public string email { get; set; }

    public string email_verified_at { get; set; }

    public DateTime? created_at { get; set; }

    public DateTime? updated_at { get; set; }

}

這是為了Group


class Group

{

    public int id { get; set; }

    public string name { get; set; }

    public DateTime? created_at { get; set; }

    public DateTime? updated_at { get; set; }

    public _Color color { get; set; }

}


class _Color

{

    public int id { get; set; }

    public string hex { get; set; }

    public DateTime? created_at { get; set; }

    public DateTime? updated_at { get; set; }

}

用法:反序列化代碼


string json = "Your json here";


Vehicle vehicle = JsonConvert.DeserializeObject<Vehicle>(json);


switch (vehicle.OwnerType)

{

    case EnumOwnerType.User:

        User user = vehicle.Owner.ToObject<User>();

        break;


    case EnumOwnerType.Group:

        Group group = vehicle.Owner.ToObject<Group>();

        break;

}

在上面switch的塊中,案例根據(jù)OwnerType枚舉自動執(zhí)行,并且Owner是JObject將您的ownerjson 對象類型轉(zhuǎn)換為適當(dāng)?shù)哪P蚒ser或Group。


輸出:(來自調(diào)試器)


1) 對于你的第一個帶有"owner_type": "App\\Models\\User".

http://img1.sycdn.imooc.com//63a666590001002604510155.jpg

2) 對于你的第二個 json"owner_type": "App\\Models\\Group"

http://img1.sycdn.imooc.com//63a6666400018d4904990137.jpg


查看完整回答
反對 回復(fù) 2022-12-24
?
冉冉說

TA貢獻(xiàn)1877條經(jīng)驗 獲得超1個贊

只是反序列化為動態(tài)。您可以使用 ExpandoObject 獲得所需內(nèi)容。


var converter = new ExpandoObjectConverter();    

dynamic customer1 = JsonConvert.DeserializeObject<ExpandoObject>(jsonString, converter);

Console.WriteLine(customer1.owner.username);


查看完整回答
反對 回復(fù) 2022-12-24
  • 2 回答
  • 0 關(guān)注
  • 111 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號