如何在Asp.net mvc中使用控制器的Json方法正确序列化C#长数字?

问题描述 投票:0回答:2

Mvc Controller.Json方法将长数3458764513820540917序列化为3458764513820541000。我需要具有int64属性的POCO。如何将 C# long 序列化为 json 字符串“3458764513820540917”?

c# model-view-controller
2个回答
7
投票

JavaScript 中的所有数字实际上都是 64 位浮点数

在我看来,您在客户端遇到了该格式的范围/精度限制,而不是(反)序列化的问题。


0
投票

我知道这个问题很久以前就被问过,但对于那些遇到类似问题的人来说,这里有一个更新的解决方案。

在尝试通过 JSON 从 Asp.Net C# 后端发送

UInt64
字段到我的 Angular 前端时,我遇到了类似的问题。收到的值四舍五入为最小的 3 位有效数字。

4070661594142490595 => 4070661594142490600

我能够使用设置为“

WriteAsString
”的 System.Text.Json.Serialization.JsonNumberHandling 属性来解决它。

[Serializable]
public class MyStruct
{
    [JsonNumberHandling(JsonNumberHandling.WriteAsString)]
    public UInt64 ID { get; set; } = 0;
    public int Data{ get; set; } = 0;
}

在 Angular 方面,当通过

http.get
接收 JSON 时,我使用
BigInt
作为相应的属性。

export interface MyStruct
{
    readonly ID: BigInt;
    readonly Data: number;
}
© www.soinside.com 2019 - 2024. All rights reserved.