1 回答

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);
- 1 回答
- 0 關(guān)注
- 210 瀏覽
添加回答
舉報(bào)