JsonSerializer Struct with asp-net core 3.0



当我将结构转换为 json 时,我在使用 .net core 3.0 时遇到了问题。(当我使用 .net Core 2.2 时,这不是问题(

这是我的结构

[Serializable]
struct Item
{
public int A;
public string B;
public int C;
public decimal D;
public decimal E;
}

这是我的代码

var linhas = COD_PRODUTO.Count;
Item[] item = new Item[linhas];
for (int cont = 0; cont < linhas; cont++)
{
DESCRICAO = _context.Produtos.Where(c => c.COD_PRODUTO == COD_PRODUTO[cont]).Select(c => 
c.DESCRICAO).Single().ToString();
item[cont].A = COD_PRODUTO[cont];
item[cont].B = DESCRICAO;
item[cont].C = QUANTIDADE[cont];
item[cont].D = PRECOUNITARIO[cont];
item[cont].E = TOTAL[cont];
}
var json = JsonSerializer.Serialize(item); //3.0
Debug.WriteLine("----------------------" + json);
return new JsonResult(json);

它返回我空值,有什么帮助吗?

从 3.0 开始,ASP.NET Core 使用该System.Text.Json来序列化/反序列化 json。默认情况下,公共属性是序列化的。 请参阅官方文档:

序列化行为

默认情况下,所有公共属性都是序列化的。

  1. 若要解决此问题,可以将这些公共字段更改为公共属性,如下所示:

    [可序列化] 结构项 { public int a{get;设置;}公共字符串B {get;设置;}public int c{get;设置;}公共十进制 D{get;设置;}公共十进制 E{get;set;}}
  2. 或者作为替代方案,您可以按照官方文档使用 Newtonsoft.Json 包回退到旧行为:

    services.AddControllers()
    .AddNewtonsoftJson(opts =>{ /*...*/ });
    

最新更新