gpt4 book ai didi

blazor - 在 Blazor JSInterop 中保留套管?

转载 作者:行者123 更新时间:2023-12-05 06:13:57 25 4
gpt4 key购买 nike

我有这些在 ASP.NET Core 服务器和 Javascript 之间发送的数据结构。数据以使用 websocket 消息序列化的 JSON 格式发送。

在这个例子中,对象有一个名为 Text 的参数(大写 T)

Server(C# object) --> System.Text...JsonSerialize --> WebSocket --> JSON.parse --> JS object

最终 JS 对象:

{
"Text": "Hello"
}

在引入使用 ClientWebSocket 直接与服务器对话的 Blazor WebAssembly 之后

Server(C# object) --> System.Text...Serialize --> WebSocket --> System.Text...Deserialize --> C# object

问题,我的问题来自 JSInterop。

Blazor --> JSInterop --> JavaScript

最终 JS 对象:

{
"text": "Hello"
}

现在 Text 属性的名称 text 全部为小写。

如何配置对象序列化以保留 C# 对象的大小写?

解决方法

当前的解决方法是在通过 JSInterop 传递对象之前序列化对象,然后运行 ​​JSON.parse 以取回对象。

C#

var jsonString = JsonSerializer.Serialize(arg)
JSRuntime.InvokeVoidAsync("MyFunction", jsonString);

JavaScript

window.MyFunction = function (jsonString) {
var arg = JSON.parse(jsonString)
....
}

最佳答案

您可以在每个属性上使用 [JsonPropertyName("PropName")],像这样:

public class ClientObj
{
[JsonPropertyName("MyProp")]
public int MyProp { get; set; }
}

这会阻止 atm 在 js 中提供驼峰式属性。

发生这种情况的原因:https://github.com/aspnet/Mvc/issues/4283

关于blazor - 在 Blazor JSInterop 中保留套管?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63103321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com