Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql EF核心-如何舍入DB值以最小化json?_Sql_Json_Entity Framework_Asp.net Core_Entity Framework Core - Fatal编程技术网

Sql EF核心-如何舍入DB值以最小化json?

Sql EF核心-如何舍入DB值以最小化json?,sql,json,entity-framework,asp.net-core,entity-framework-core,Sql,Json,Entity Framework,Asp.net Core,Entity Framework Core,根据主题,我如何通过舍入值来优化来自EF核心实体的json响应 在我的示例中,SQL Server数据库表(数据库优先方法)中有许多数字列,其类型为decimal(18,9)。然而,大多数数据是0.000000000—乘以它生成的大数据加载的列数,可以是简单的四舍五入0(1个字符,而不是json中传递的11个字符) 如何做到这一点?发生了什么 基本上是这样的: HTTP Request -> API Controller -> EF Core Query -> JSON Ser

根据主题,我如何通过舍入值来优化来自EF核心实体的json响应

在我的示例中,SQL Server数据库表(数据库优先方法)中有许多数字列,其类型为
decimal(18,9)
。然而,大多数数据是0.000000000—乘以它生成的大数据加载的列数,可以是简单的四舍五入0(1个字符,而不是json中传递的11个字符)

如何做到这一点?

发生了什么 基本上是这样的:

HTTP Request -> API Controller -> EF Core Query -> JSON Serialization -> HTTP Response
关键部分是JSON序列化。这将获取任意数据(在您的示例中是EF核心查询的结果)并将其转换为JSON。JSON序列化是由调用API控制器方法的对象在后台调用的。由于ASP.Net内核的默认配置,它是由
System.Text.Json.JsonSerializer
完成的。为了获得
0.0
而不是
0.000000000
,您必须更改该配置

如何解决 要更改ASP.NET core的默认JSON序列化配置,必须在
Startup.cs
文件中的
ConfigureServices()
方法中添加一些代码:

// Inside Startup.cs

// Find services.AddControllers() and change it to
services
    .AddControllers()
    .AddJsonOptions(o => o.JsonSerializerOptions.Converters.Add(new MyDecimalConverter()));

上面的代码需要添加到项目中的
MyDecimalConverter

public class MyDecimalConverter : JsonConverter<Decimal>
{
    public override Decimal Read(
        ref Utf8JsonReader reader,
        Type typeToConvert,
        JsonSerializerOptions options) =>
        reader.GetDecimal();

    public override void Write(
        Utf8JsonWriter writer,
        Decimal decimalValue,
        JsonSerializerOptions options) =>
        // taken from https://stackoverflow.com/a/7983330/4262276
        writer.WriteNumberValue(decimalValue / 1.0000000000000000000000000000m);
}
公共类MyDecimalConverter:JsonConverter
{
公共重写十进制读取(
参考Utf8JsonReader读取器,
类型转换,
JsonSerializerOptions选项)=>
reader.GetDecimal();
公共覆盖无效写入(
Utf8JsonWriter,
十进制小数,
JsonSerializerOptions选项)=>
//取自https://stackoverflow.com/a/7983330/4262276
writer.WriteNumberValue(小数点/1.0000000000000000000000000000米);
}

您知道使用哪个库将数据转换为JSON吗?是System.Text.Json(可能是.NET Core 3.1)还是Newtonsoft?我是.NET Core编程新手。如何检查?我没有在项目中明确提供这一点。我认为它是System.Text.Json,因为在代码中找不到“Newtonsoft”。这是开箱即用的:-)感谢您提供了流程的高级概述,非常感谢!我认为在将数据序列化之前,在EF核心级别将有更简单的方法对数据进行取整。我看到的瓶颈有点慢——对于一张小桌子,我的“等待”(TTFB)从2秒提高到10秒左右。