C# 处理从web服务器接收的json的优雅方式?

C# 处理从web服务器接收的json的优雅方式?,c#,json,webclient,C#,Json,Webclient,用C#处理从web服务器接收到的json的更好方法是什么 将System.Json.JsonValue对象直接传递给响应处理程序可以吗 new FooWebService().FetchSomethingAsync(12, "bar", json => { DoSomething1(ConvertJsonToClass1(json["key1"])); DoSomething2(ConvertJsonToClass2(json["key2"]));

用C#处理从web服务器接收到的json的更好方法是什么

将System.Json.JsonValue对象直接传递给响应处理程序可以吗

new FooWebService().FetchSomethingAsync(12, "bar", json =>
    {
        DoSomething1(ConvertJsonToClass1(json["key1"]));
        DoSomething2(ConvertJsonToClass2(json["key2"]));
    });
或者我需要用一些“响应”接口的json实现包装JsonValue

interface IResponse
{ ... }

class JsonResponse : IResponse
{ ... }

new FooWebService().FetchSomethingAsync(12, "bar", response =>
    {
        DoSomething1(ConvertResponseToClass1(response["key1"]));
        DoSomething2(ConvertResponseToClass2(response["key2"]));
    });
或者在将json传递给处理程序之前将其转换为众所周知的对象

interface IResponseConverter
{ ... }

class JsonConverter : IResponseConverter
{ ... }

var service = new FooWebService() 
{
    ResponseConverter = new JsonConverter()
};
service.FetchSomethingAsync(12, "bar", response =>
    {
        DoSomething1(response.Key1);
        DoSomething2(response.Key2);
    });

这取决于您希望有多大的灵活性,另一方面,您需要多少时间来实现一个完整的解决方案

如果时间不受限制-我建议坚持使用更灵活的解决方案,使用
IResponse
IResponseConverter
将责任和关注点分开


如果时间有限,我建议您坚持使用
IResponseConverter
,这样您就可以轻松添加对新数据格式的支持。

MVC有System.Web.MVC.JsonResult,可能值得一看

你是否考虑过使用动态类型?这是一个很好的总结,也是一个与我使用的非常类似的技巧:


所以,有必要为每种响应类型声明DTO类,不是吗?