反序列化一个对象,该对象可以包含JSON格式的字符串或int

tzdcorbm  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(76)

如何使用JsonConvert.DeserializeObject(useCaseData)将JSON格式的对象与有效数据反序列化?
我试过JsonConvert.DeserializeObject<Dictionary<string, string>>(useCaseData)
但我得到了这个错误:Newtonsoft.Json.JsonSerializationException: 'Error converting value 1 to type 'System.Collections.Generic.Dictionary2[System.String,System.String]'. Path '', line 1, position 1.`
基类:

public class ReadUseCaseLogDto
    {
        public int Id { get; set; }
        public string UseCaseName { get; set; }
        public object Data { get; set; }
        public DateTime ExecutedAt { get; set; }
        public int UserId { get; set; }

    }

返回字符串值的数据:

{
    "totalCount": 281,
    "currentPage": 14,
    "itemsPerPage": 10,
    "pageCount": 29,
    "items": [
        {
            "id": 131,
            "useCaseName": "Read use case logs using Entity Framework",
            "data": {
                "DateFrom": [],
                "DateTo": [],
                "UseCaseName": [],
                "Fullname": []
            },

此转换会引发错误,因为它无法从int转换为string:

{
            "id": 9,
            "useCaseName": "Delete brand using Entity Framework",
            "data": 1,
            "executedAt": "2023-06-06T00:08:56.8566667",
            "userId": 4
        }

可以使用一些通用的或其他的东西吗?

b0zn9rqh

b0zn9rqh1#

如果你使用对象而不是字符串,它应该可以工作:
JsonConvert.DeserializeObject<Dictionary<string,Object>>(useCaseData)

cyej8jka

cyej8jka2#

你有一个数组,而不是字典,所以试试下面的代码

List<ReadUseCaseLogDto> items = JObject.Parse(useCaseData)["items"]
                                       .ToObject<List<ReadUseCaseLogDto>>();

相关问题