首页 > 解决方案 > 通过从响应中删除数据类型将 API 响应转换为 C# 中的类对象

问题描述

我收到类似这样的 API 响应

 {
    "results": [{
        "itemdescription": {
            "raw": "xyz"
        },
        "productcategory5": {
            "raw": "avx"
        },
        "productcategory6": {
            "raw": "DG"
        }
    }]
}

我正在尝试使用 DeserializeObject 将其转换为类对象

lObjJsonData = JsonConvert.DeserializeObject<ProductVm>(lObjResponseData);

但在我的虚拟机中,我必须添加额外的属性

[JsonProperty("raw")]
public string raw { get; set; } 

我如何避免这种情况,就像我将我的类对象转换为 json 一样,它将再次具有每个字段的 datatype 属性。

我的课程代码如下 -

public class ProductAppSearchVm
{
 
    public MetaClass meta { get; set; }
    public List<ProductDetails> results { get; set; }

}

public class ProductProperty
{
    [JsonProperty("raw")]
    public string raw { get; set; } 
}

public class ProductDetails
{          
    public ProductProperty itemdescription{ get; set; }
    public ProductProperty productcategory5{ get; set; }
    public ProductProperty productcategory6{ get; set; }
}

任何建议我如何才能获得简单的数据,例如-

{
    "results": [{
            "itemdescription": "xyz"
        },
        {
            "productcategory5": "avx"
        },
        {
            "productcategory6": "DG"
        }
    ]
}

标签: c#json

解决方案


**尚不确定性能是否明智。但是对于您想要的输出,这可能会给您一个提示。

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp1
{
class Program
{
    static void Main(string[] args)
    {
        string jsonString = "{\"results\":[{\"itemdescription\":{\"raw\":\"xyz\"},\"productcategory5\":{\"raw\":\"avx\"},\"productcategory6\":{\"raw\":\"DG\"}}]}";
        var obj = JsonConvert.DeserializeObject<ProductDetails>(jsonString);
        Console.WriteLine(obj.GetFormattedJson);
        Console.ReadKey();
    }
}

public class ProductDetails
{
    [JsonProperty("results")]
    public List<Dictionary<string, ProductProperty>> Detail { get; set; }

    public string GetFormattedJson
    {
        get
        {
            return string.Join(",", Detail.Select(dic => "{\"results\":[" + string.Join(",", dic.Select(pp => $"{{\"{pp.Key}\":\"{pp.Value.Raw}\"}}")) + "]}"));
        }
    }
}

public class ProductProperty
{
    [JsonProperty("raw")]
    public string Raw { get; set; }
}
}

输出:
在此处输入图像描述


推荐阅读