c# - 如何创建转换器以便 JsonConvert.DeserializeObject 将转换 List属性只是字符串属性
问题描述
我有以下课程...
public class ResultDTO
{
public string MSAccountNumber { get; set; }
public string MSCaseNumber { get; set; }
public string StatusMessage { get; set; }
public string StatCode { get; set; }
}
不出所料,JsonConvert.DeserializeObject
无法将以下 JSON 转换为该对象....
{
"StatusMessage": [
"Record processed successfully"
],
"StatCode": [
"200"
],
"MSCaseNumber": [
"500"
],
"MSAccountNumber": [
"001"
]
}
我已询问 API 创建者是否可以更改 API,以便返回的 JSON 具有字符串属性而不是List<string>
属性。但是如果他无法适应,我该如何实现和使用 aJsonConverter
以便JsonConvert
成功地将 JSON 转换为我的目标类。假设 JSON 中的所有 List 属性都至少有一个项目(永远不会为 null 或空),并且我们想要获取第一个项目。
我知道这可以做到,但我不知道怎么做。
解决方案
这是一个适合您的转换器:
class StringArrayToStringConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null) return null;
if (reader.TokenType == JsonToken.String) return (string)reader.Value;
if (reader.TokenType == JsonToken.StartArray)
{
JArray array = JArray.Load(reader);
string value = (string)array.Children<JValue>().FirstOrDefault();
return value;
}
throw new JsonException("Unexpected token type: " + reader.TokenType);
}
public override bool CanWrite => false;
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
像这样使用它:
var dto = JsonConvert.DeserializeObject<ResultDTO>(json, new StringArrayToStringConverter());
推荐阅读
- c++ - 从另一个类的静态成员调用一个类的非静态成员
- python - 使用python从未知日期格式获取年份
- python - 我怎样才能使存在循环?
- c - 如何检查命令解析器中的空输入
- javascript - 在jquery中的固定行数上添加/删除列
- javascript - 追加和推入数组时如何获取元素的值
- javascript - 如何修复错误:相邻的 JSX 元素必须包含在封闭标记中?在本机反应
- r - 当自变量满足条件时,循环遍历 GLM 模型中的因变量
- reactjs - npm 总是返回此错误“在 '...0.4.2 附近解析时 JSON 输入意外结束”:{“name”:“comma””
- c++ - 如何返回函数的参数个数?