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

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

使用不同的模式反序列化 JSON

使用不同的模式反序列化 JSON

我將 JSON.Net 與 .NET 4.7 一起使用。在我調(diào)用的 API 中,對(duì)于同一個(gè)調(diào)用,我似乎可以隨機(jī)獲得兩種錯(cuò)誤 json :(。錯(cuò)誤類型 1:{   "Code": 0,   "Msg": ["Some Warning"]}錯(cuò)誤類型 2:{    "Code": 0,    "Msg": [          {"Error": 5 },          {"Error": 6 }    ]}正如你所看到的,它Msg改變了它的結(jié)構(gòu)。我想要一個(gè)通用的 POCO 來(lái)反序列化,但是什么時(shí)候Msg改變呢?JsonConvert.DeserializeObject<MyCommonPoco>(theJson);
查看完整描述

1 回答

?
慕標(biāo)5832272

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

您可以編寫JsonConverter處理不同類型的自定義。例如,您可以使用以下 JSON:


{

    "Code": 0,

    "Msg": [

        "A single string",

        { "Message": "An object with a message" },

        { "Message": "An object with a message and a code", "Code": 5 },

        { "Code": 5 }

    ]

}

在此示例中,Msg數(shù)組可以包含原始字符串或復(fù)雜對(duì)象。該對(duì)象可以包含 a Message、 aCode或兩者。


您將為此選擇最常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),一種能夠表示所有信息的數(shù)據(jù)結(jié)構(gòu)。例如,這意味著您必須將該原始字符串包裝到兼容對(duì)象中。


public class Error

{

    public int Code { get; set; }

    public ErrorMessage[] Msg { get; set; }

}


public class ErrorMessage

{

    public string Message { get; set; }

    public int? Code { get; set; }

}

然后您可以使用自定義


然后,使用 custom JsonConverter,您可以解析上面的 JSON:


public class ErrorMessageConverter : JsonConverter

{

    public override bool CanConvert(Type objectType)

        => objectType == typeof(ErrorMessage);


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

    {

        // handle the primitive string

        if (reader.TokenType == JsonToken.String)

            return new ErrorMessage { Message = (string)reader.Value };


        // handle a complex object; just assume that it is an `ErrorMessage` here

        else if (reader.TokenType == JsonToken.StartObject)

            return JObject.Load(reader).ToObject<ErrorMessage>();


        throw new NotSupportedException();

    }


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

    {

        throw new NotImplementedException();

    }

}

這將是使用該轉(zhuǎn)換器的一種方法:


// the single quotes are just here to make it more readable; JSON.NET support this

// although it isn’t valid JSON

var json = @"{

    'Code': 0,

    'Msg': [

        'A single string',

        { 'Message': 'An object with a message' },

        { 'Message': 'An object with a message and a code', 'Code': 5 },

        { 'Code': 5 }

    ]

}";


var settings = new JsonSerializerSettings()

settings.Converters.Add(new ErrorMessageConverter());


var result = JsonConvert.DeserializeObject<Error>(json, settings);

http://img1.sycdn.imooc.com//6199b75d0001559003560205.jpg

查看完整回答
反對(duì) 回復(fù) 2021-11-21
  • 1 回答
  • 0 關(guān)注
  • 210 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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