Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NancyFx每个模块或每个路由序列化_C#_Rest_Serialization_Nancy - Fatal编程技术网

C# NancyFx每个模块或每个路由序列化

C# NancyFx每个模块或每个路由序列化,c#,rest,serialization,nancy,C#,Rest,Serialization,Nancy,我使用NancyFx,我试图在提问之前找到答案 我每个模块有一个单一的返回类型,但在不同的URL路由中,我需要以不同的方式序列化它,只需要特定的属性。 如果我在Nancy管道中连接序列化,它将涉及所有路由 是否可以自定义每个路由或模块的序列化,而无需在不同名称空间中复制粘贴相同类型?我提出了两种解决方案: 在相应的重写道具上具有jsonvert属性的派生类型 在模块内使用序列化并返回字符串 在没有更好地理解需求的情况下,不确定具体推荐什么 考虑实现一个响应处理器 在CanProcess的实现中,

我使用NancyFx,我试图在提问之前找到答案

我每个模块有一个单一的返回类型,但在不同的URL路由中,我需要以不同的方式序列化它,只需要特定的属性。 如果我在Nancy管道中连接序列化,它将涉及所有路由


是否可以自定义每个路由或模块的序列化,而无需在不同名称空间中复制粘贴相同类型?

我提出了两种解决方案:

  • 在相应的重写道具上具有
    jsonvert
    属性的派生类型
  • 在模块内使用序列化并返回
    字符串

  • 在没有更好地理解需求的情况下,不确定具体推荐什么

    考虑实现一个响应处理器

    在CanProcess的实现中,您可以检查NancyContext以评估要使用哪个序列化方案的规则

    例如:

    public ProcessorMatch CanProcess(MediaRange requestedMediaRange, dynamic model, NancyContext context)
        {
            return context.Request.Path != "/" && 
                !context.Request.Path.StartsWith("/someroute/") && 
                !context.Request.Path.StartsWith("/someotherroute") &&
                !context.Request.Path.StartsWith("/login")
                ? new ProcessorMatch
                {
                    ModelResult = MatchResult.DontCare,
                    RequestedContentTypeResult = MatchResult.ExactMatch
                }
                : new ProcessorMatch
                {
                    ModelResult = MatchResult.DontCare,
                    RequestedContentTypeResult = MatchResult.NoMatch
                };
        }
    

    考虑:对路由使用WithMediaRangeModel进行内容协商

    使您能够定义应使用的特定于介质类型的型号 在谈判期间。谈判管道将首先尝试 找到要使用的媒体类型特定的模型,并将回退到 默认模型,如果失败,则使用WithModel指定


    如果我记得很清楚,您可以使用模块或路由管道,而不是应用程序级管道