c# - 通过从响应中删除数据类型将 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"
}
]
}
解决方案
**尚不确定性能是否明智。但是对于您想要的输出,这可能会给您一个提示。
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; }
}
}
推荐阅读
- microservices - 如何监控本地网络中的连接
- corda - 使用 azure 市场的 Corda 测试网中的问题
- php - 堆栈无法转换为 int
- python - Python Postgres - 如何为单列创建数组?
- c# - C#发出对泛型方法的调用
- excel - 带有VBA的excel表头公式
- spring - 调试 jHipster 应用程序
- c++ - 对类静态 constexpr 结构的未定义引用,g++ vs clang
- winapi - 有没有办法从 Win32 应用程序检测 Windows 10 中的焦点辅助(以前称为安静时间)的变化
- eclipse - eclipse ide中的空格(>>>>>>)和空格(......)有什么区别?