gpt4 book ai didi

c# - 使用 Newtonsoft Json ItemConverterType 的正确方法

转载 作者:行者123 更新时间:2023-12-02 10:33:00 25 4
gpt4 key购买 nike

我从网络服务返回了一些无法更改的不良数据。该服务返回 JSON 客户列表。在此列表中,每个客户还有一个工作列表。但返回的 JSON 是作业的字符串。

所以:工作:“[]”而不是工作:[]

所以我将类定义为

[JsonProperty(PropertyName = "JOBS", ItemConverterType = typeof(StringToJobsConverter))]
public List<JobClass> Jobs { get; set; }

我创建了该类,并在其中创建了转换方法,如下所示:

return JsonConvert.DeserializeObject<List<JobClass>>(existingValue.ToString());

运气不好。返回的错误是无法从 System.String 转换或转换为 System.Collections.Generic.List`1[AppNamespace.JobClass]

转换器代码中的断点永远不会被命中。谁能看出我做错了什么吗?

更新

我发现了这个问题,但不知道如何解决。转换器被应用到列表中的 JobClass。不是列表本身。我希望转换器仅应用于列表反序列化一次。相反,它会应用于列表中的每个 JobClass 记录。

最佳答案

string json = @"{str1:""abc"",list:""[1,2,3]"", str2:""def""}";
var temp = JsonConvert.DeserializeObject<Temp>(json);

public class Temp
{
public string str1;
[JsonConverter(typeof(StringConverter<List<int>>))]
public List<int> list;
public string str2;
}

public class StringConverter<T> : JsonConverter
{
public override bool CanConvert(Type objectType)
{
throw new NotImplementedException();
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return JsonConvert.DeserializeObject<T>((string)reader.Value);
}

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}

关于c# - 使用 Newtonsoft Json ItemConverterType 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24639750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com