当我将结构转换为 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。默认情况下,公共属性是序列化的。 请参阅官方文档:
序列化行为
默认情况下,所有公共属性都是序列化的。
-
若要解决此问题,可以将这些公共字段更改为公共属性,如下所示:
[可序列化] 结构项 { public int a{get;设置;}公共字符串B {get;设置;}public int c{get;设置;}公共十进制 D{get;设置;}公共十进制 E{get;set;}}
-
或者作为替代方案,您可以按照官方文档使用 Newtonsoft.Json 包回退到旧行为:
services.AddControllers() .AddNewtonsoftJson(opts =>{ /*...*/ });