You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor SignalR传输自定义类对象为空问题及解决咨询

Blazor SignalR 自定义对象传输为空的解决方法

问题场景

在Blazor中使用SignalR时,传输单个字符串完全正常,但发送自定义Message类对象到服务器时,服务器接收到的是空对象。

问题根源

当前的Message类使用的是公共字段,而SignalR默认的序列化器(System.Text.Json)只会序列化带get/set的公共属性,字段不会被自动序列化,导致服务器无法解析到对象数据。

解决步骤

1. 将自定义类的字段改为公共属性(推荐方案)

这是最规范且无需额外配置的解决方式,同步修改服务端和客户端的Message类:

服务端修改后的代码

public class Message
{
    // 替换字段为带get/set的公共属性
    public string? User { get; set; }
    public string? Mesg { get; set; }

    public override string ToString()
    {
        return $"User = {User}; message = {Mesg} ";
    }
}

public class ChatHub : Hub
{
    public async Task SendMessage(Message _message)
    {
        await Console.Out.WriteLineAsync(_message.ToString());
        await Clients.All.SendAsync("ReceiveMessage", _message);
    }
}

客户端修改后的代码

// 客户端的Message类同步改为属性
public class Message
{
    public string? User { get; set; }
    public string? Mesg { get; set; }
}

private async Task Send()
{
    if (hubConnection is not null)
    {
        await hubConnection.SendAsync("SendMessage", new Message()
        {
            User = userInput,
            Mesg = messageInput
        });
    }
}

protected override async Task OnInitializedAsync()
{
    hubConnection = new HubConnectionBuilder()
        .WithUrl(Navigation.ToAbsoluteUri("/chathub"))
        .Build();

    hubConnection.On<Message>("ReceiveMessage", (_message) =>
    {
        var encodedMsg = $"{_message.User}: {_message.Mesg}";
        messages.Add(encodedMsg);
        InvokeAsync(StateHasChanged);
    });
    await hubConnection.StartAsync();
}

2. 可选:配置序列化器支持字段(临时兼容方案)

如果不想修改类结构,可以通过配置让SignalR的序列化器包含字段。在服务端的Program.cs中添加:

builder.Services.AddSignalR()
    .AddJsonProtocol(options =>
    {
        // 开启字段序列化支持
        options.PayloadSerializerOptions.IncludeFields = true;
    });

注意:这种方式不符合C#封装规范,仅作为临时兼容方案使用。

额外注意事项

  • 确保客户端和服务端的Message类结构完全一致:成员名称、类型、可访问性必须匹配,否则会出现序列化/反序列化失败。
  • 如果使用了其他序列化器(比如Newtonsoft.Json),需要对应配置其序列化规则。

内容的提问来源于stack exchange,提问作者Андрей Галуза

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:43:15