【问题标题】:How to pass Json object as parameter in C# method如何在 C# 方法中将 Json 对象作为参数传递
【发布时间】:2019-07-22 11:50:21
【问题描述】:

我在 Controller 中有以下方法,我将 JsonResult 传递给 C# 中的另一个类 (Receiver.cs)。那么,在 Receiver.cs 类中作为参数的正确数据类型是什么?我使用了JsonResult,但不确定它是否是这种情况的最佳选择?我还将 Receiver.cs 类的这个结果作为 Json 对象返回给客户端。

控制器:

public void Create() {

    //code omitted for brevity
    var data = GetData(); 

    var data = Json(new { Data = data, success = true }, JsonRequestBehavior.AllowGet);

    Receiver.BroadcastData(data); 
}

这是Receiver.cs中的方法:

Receiver.cs:

public class Receiver
{
    public static void BroadcastData(JsonResult data)
    {
        ...
    }
}

更新: 实际上我使用 ASP.NET MVC 和 SignalR。在这里,我想将 Json 对象从 Controller 传递到 Hub 类。之后,我会将这个 Json 对象广播给客户端。

【问题讨论】:

    标签: c# json asp.net-mvc signalr


    【解决方案1】:

    我假设您想向每个 SignalR 连接发送一个 JSON 对象。

    使用Json() 是为了从控制器操作返回一个 JSON 对象,所以它并不适合这里。

    但 SignalR 让它变得简单。您发送到 SignalR 客户端的任何对象都会被序列化为 JSON。所以你不必担心序列化。您不必告诉它“我希望它以 JSON 格式发送”。

    因此,如果您想要一个通用方法将任何类型的对象发送到客户端,只需接受object。当您将其传递给 SignalR 时,它会将其序列化为客户端的 JSON。

    public void Create() {
    
        //code omitted for brevity
        var data = GetData(); 
    
        Receiver.BroadcastData(data); 
    }
    
    public class Receiver
    {
        public static void BroadcastData(object data)
        {
            ...
        }
    }
    

    但是,我不完全知道这会有多大用处。客户端仍然必须知道它是什么类型的数据,这样它才能以有意义的方式处理它。所以你可能会发现你实际上会从不同的 SignalR 方法中受益,将特定类型的数据传递给客户端,因此客户端已经知道它正在获取什么类型的数据。

    【讨论】:

    • 非常感谢您的回复。在这个场景中,我认为没有必要将数据作为 Json 传递给 Hub 类。但是我尝试在返回客户端之前将数据对象转换为 JsonResult,但不能使用 Json 方法,因为它在 Controller 中使用。有什么想法吗?
    • 我认为将字符串返回给客户端并不是一个好主意,因为我的数据有一些元素,即 Total、Sum、Average 等。因此,我想从 Hub 将数据作为 Json 返回。
    • 您根本不需要将数据转换为 JSON。 SignalR 会为您做到这一点。
    • 这里是the documentation says:“您在参数中接收或返回给调用者的任何数据都使用JSON在客户端和服务器之间进行通信,SignalR处理复杂对象和数组的绑定对象自动。”
    • 你摇滚!..现在没关系,在您宝贵的手帮助帮助下像魅力一样工作...投票并标记为答案,非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 2016-04-02
    • 2020-06-05
    • 1970-01-01
    • 2012-04-22
    • 2017-03-04
    相关资源
    最近更新 更多