asp-net core 3.0 的 JsonSerializer 结构
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 核心使用 System.Text.Json
到 serialize/deserialize json。 public 属性默认是序列化的。见 official docs:
Serialization behavior
By default, all public properties are serialized.
要解决该问题,您可以将那些public字段更改为public 属性如下:
[Serializable]
struct Item
{
public int A {get;set;}
public string B {get;set;}
public int C {get;set;}
public decimal D {get;set;}
public decimal E {get;set;}
}
或者作为替代方案,您可以按照 the official docs to fallback to the old behavior by using the Newtonsoft.Json 套餐:
services.AddControllers()
.AddNewtonsoftJson(opts =>{ /*...*/ });
我在将结构转换为 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 核心使用 System.Text.Json
到 serialize/deserialize json。 public 属性默认是序列化的。见 official docs:
Serialization behavior
By default, all public properties are serialized.
要解决该问题,您可以将那些public字段更改为public 属性如下:
[Serializable] struct Item { public int A {get;set;} public string B {get;set;} public int C {get;set;} public decimal D {get;set;} public decimal E {get;set;} }
或者作为替代方案,您可以按照 the official docs to fallback to the old behavior by using the Newtonsoft.Json 套餐:
services.AddControllers() .AddNewtonsoftJson(opts =>{ /*...*/ });