2

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

在此示例中,对象具有名称为Text(Uppercase T)的参数

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

最终的 JS 对象:

{
  "Text": "Hello"
}

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

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)
    ....
}
4

1 回答 1

0

您可以[JsonPropertyName("PropName")]在每个属性上使用,如下所示:

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

这会阻止它 atm 在 js 中提供 camelCase 属性。

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

于 2021-12-03T10:45:58.947 回答