【发布时间】:2016-07-15 18:06:44
【问题描述】:
每当我尝试反序列化下面的 json 字符串时都会收到此错误:
错误:
附加信息:转换值时出错 “invalid_request_error”键入“ErrorType”。路径“类型”,第 2 行, 第 33 位。
Json 字符串
{
"error": {
"type": "invalid_request_error",
"message": "Invalid request (check that your POST content type is application/x-www-form-urlencoded). If you have any questions, we can help at https://support.stripe.com/."
}
}
代码
private void btnDeserialize_Click(object sender, EventArgs e)
{
var r = Components.JsonMapper.MapFromJson<Components.DTO.Error>(txtToDeserialize.Text, "error");
txtDeserialized.Text = JsonConvert.SerializeObject(r);
}
JsonMapper
public static class JsonMapper
{
public static T MapFromJson<T>(string json, string parentToken = null)
{
var jsonToParse = string.IsNullOrEmpty(parentToken) ? json : JObject.Parse(json).SelectToken(parentToken).ToString();
return JsonConvert.DeserializeObject<T>(jsonToParse);
}
}
枚举
public enum ErrorCode
{
Default,
[JsonProperty("invalid_number")]
InvalidNumber,
[JsonProperty("invalid_expiry_month")]
InvalidExpiryMonth,
[JsonProperty("invalid_expiry_year")]
InvalidExpiryYear,
[JsonProperty("invalid_cvc")]
InvalidCvc,
[JsonProperty("incorrect_number")]
IncorrectNumber,
[JsonProperty("expired_card")]
ExpiredCard,
[JsonProperty("incorrect_cvc")]
IncorrectCvc,
[JsonProperty("incorrect_zip")]
IncorrectZip,
[JsonProperty("card_declined")]
CardDeclined,
[JsonProperty("missing")]
Missing,
[JsonProperty("processing_error")]
ProcessingError
}
public enum ErrorType
{
Default,
[JsonProperty("api_connection_error")]
ApiConnectionError,
[JsonProperty("api_error")]
ApiError,
[JsonProperty("authentication_error")]
AuthenticationError,
[JsonProperty("card_error")]
CardError,
[JsonProperty("invalid_request_error")]
InvalidRequestError,
[JsonProperty("rate_limit_error")]
RateLimitError
}
我想坚持使用枚举而不是字符串。
有什么好的解决方法?
【问题讨论】:
标签: c# json enums json.net deserialization