首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过SignalR将自定义类发送到Blazor WebAssembly

问通过SignalR将自定义类发送到Blazor WebAssembly
EN

Stack Overflow用户
提问于 2020-08-09 22:05:58
回答 1查看 362关注 0票数 0

我对通过SignalR集线器将自定义类发送到客户端(Blazor WebAssembly)有异议。我有工作进程,即定期向所有连接的客户端发送数据。如果我试图发送标准数据,字符串,字符串列表,日期等。客户端可以处理它没有任何问题。但是当我试图发送我自己的“数据类”时,我收到了这个错误。

Microsoft.AspNetCore.SignalR.Client.HubConnection57未能绑定在“ReceiveProject”的调用“(Null)”中接收到的参数。System.IO.InvalidDataException:错误绑定参数。确保所提供的值的类型与正在调用的集线器方法的类型相匹配。-> System.NotSupportedException:不支持无参数构造函数的引用类型反序列化。类型'SekvenceReport.Shared.Project‘

这是我的定制课程

自定义类

代码语言:javascript
复制
public class Project
{
    public Project(string name, string[] dbtable)
    {
        this.Name = name;
        this.DbTable = dbtable;
        this.Slbs = new List<Slb>();
        this.Duplicity = true;
        this.EdiError = true;
    }
    public string Name { get; set; }
    public string[] DbTable { get; set; }

    public List<Slb> Slbs { get; set; }

    public bool Duplicity { get; set; }
    public bool EdiError { get; set; }
}

public class Slb
{
    public Slb(string slbid)
    {
        this.SlbId = slbid;
        this.Sekvences = new List<Sequence>();
        this.Status = "Připraveno";
    }
    public Slb()
    {
    }
    public string SlbId { get; set; }
    public List<Sequence> Sekvences { get; set; }
    public string Status { get; set; }
    public string StatusAsn { get; set; }
    public string StatusEvaluation()
    {
        string eval = this.Status;

        if (this.Sekvences.Any(i => i.Status == "D") && this.Sekvences.Any(i => i.Status == "N"))
        {
            eval = "Sekvencování";
            this.Status = eval;
            return this.Status;
        }
        else if (this.Sekvences.Any(i => i.Status == "D"))
        {
            eval = "Uvolněno";
            this.Status = eval;
            return this.Status;
        }
        else if (this.Sekvences.Any(i => i.Status == "N"))
        {
            if (this.Sekvences.Any(i => i.LoadingStatus == true) && this.Sekvences.Any(i => i.LoadingStatus == false))
            {
                eval = "Nakládání";
                this.Status = eval;
                return this.Status;
            }
            else if (this.Sekvences.Any(i => i.LoadingStatus == false))
            {
                eval = "Nasekvencováno";
                this.Status = eval;
                return this.Status;
            }
            else if (this.Sekvences.Any(i => i.LoadingStatus == true))
            {
                eval = "Naloženo";
                this.Status = eval;
                return this.Status;
            }
        }

        eval = "Neznámý stav";
        this.Status = eval;
        return eval;
    }
}

服务器如何从工作人员发送数据

代码语言:javascript
复制
await _projectHubContext.Clients.All.SendAsync("ReceiveProject", Data.projects);

客户端如何读取数据

代码语言:javascript
复制
    hubConnection = new HubConnectionBuilder()
        .WithUrl(NavigationManager.ToAbsoluteUri("/projecthub"))
        .ConfigureLogging(logging => logging.AddProvider(LoggerProvider))
        .Build();


    //Processing custom class (List of Projects)
    hubConnection.On<List<Project>>("ReceiveProject", (listProjects) =>
    {
        var vars = listProjects;
        //projects.AddRange(listProjects);
        projects.AddRange(vars);
        StateHasChanged();
    });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-09 22:17:11

尝试向项目类无参数添加构造函数,例如:

代码语言:javascript
复制
public class Project
{
    public Project()
    {
    }
    
    // Rest of class
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63331781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档