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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Json將字符串轉(zhuǎn)換為Collection

Json將字符串轉(zhuǎn)換為Collection

PHP
開(kāi)心每一天1111 2021-04-29 14:11:08
我從API獲取此json格式:"url_service": "","Description": null,"Target": "5,6","Category ": "2"我正在嘗試將json反序列化為模型。問(wèn)題出在“目標(biāo)”字段,該字段應(yīng)該是int的ICollection。這是我的模型:public string Description{ get; set; }public ICollection<int> Target{ get; set; }public int Category { get; set; }有沒(méi)有一種方法可以在序列化Json之前處理Json,以便從逗號(hào)分隔的字符串中進(jìn)行收集?
查看完整描述

3 回答

?
翻翻過(guò)去那場(chǎng)雪

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊

與其嘗試更改反序列化邏輯,不如不讓它變得更簡(jiǎn)單,而僅在模型中包含一個(gè)新屬性?


public string Description{ get; set; }

public int Category { get; set; }


//Change this back to string, since that is what your JSON is

public string Target{ get; set; }


//Add a "TargetList" property that just reads from "Target" and turns into a List

public List<int> TargetList => Target.Split(',').Select(x => int.Parse(x)).ToList();

請(qǐng)注意,我的代碼中沒(méi)有錯(cuò)誤處理,因此您將必須進(jìn)行相應(yīng)的修改。


查看完整回答
反對(duì) 回復(fù) 2021-05-15
?
慕容森

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊

Target字段在json中為字符串類(lèi)型,因此序列化程序?qū)L試將其讀取為字符串。您可以使用轉(zhuǎn)換器來(lái)推翻它,例如使用Newtonsoft Json。


假設(shè)您的數(shù)據(jù)結(jié)構(gòu)定義如下:


public class Data {

    public string Description{ get; set; }

    public ICollection<int> Target{ get; set; }

    public int Category { get; set; }

}

然后,您可以創(chuàng)建自己的JsonConverter,如下所示:

public class DataConverter : JsonConverter {


    public override bool CanWrite => false;


    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {

        throw new NotImplementedException();

    }


    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {


        var jObject = JObject.Load(reader);


        var data = new Data();


        if (jObject.TryGetValue("Description", out JToken jDescription)) {

            data.Description = jDescription.Value<string>();

        }

        if (jObject.TryGetValue("Target", out JToken jTarget)) {

            data.Target = ToTarget(jTarget, serializer);

        }

        if (jObject.TryGetValue("Category", out JToken jCategory)) {

            data.Category = jCategory.Value<int>();

        }


        return req;


    }


    private static ICollection<int> ToTarget( JToken jTarget, JsonSerializer serializer ) {


        int defaultValue = -1;

        var target = new List<int>();

        var collection = jTarget.Value<string>().Split(',');

        foreach (string str in collection)

            if (int.TryParse(str, out int number))

                target.Add(number);

            else

                target.Add(defaultValue);


        return target;


    }


    public override bool CanConvert(Type objectType) => objectType == typeof(Data);


}

然后,您可以使用以下代碼反序列化:


var jsonSettings = new JsonSerializerSettings();

jsonSettings.Converters.Add(new DataConverter);

Data data = JsonConvert.DeserializeObject<Data>(yourJsonString, jsonSettings);

進(jìn)一步考慮:這種方法可以使您的數(shù)據(jù)定義和數(shù)據(jù)解析邏輯之間清楚地分開(kāi),從而使您的數(shù)據(jù)結(jié)構(gòu)和定義與任何json特定的信息和解析邏輯保持清晰。


查看完整回答
反對(duì) 回復(fù) 2021-05-15
  • 3 回答
  • 0 關(guān)注
  • 280 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號(hào)

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