处理从Web服务器收到的json的优雅方式?

时间:2011-07-30 20:36:46

标签: c# json webclient

在C#中处理从Web服务器收到的json更好的方法是什么?

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

new FooWebService().FetchSomethingAsync(12, "bar", json =>
    {
        DoSomething1(ConvertJsonToClass1(json["key1"]));
        DoSomething2(ConvertJsonToClass2(json["key2"]));
    });

或者我需要用Json实现一些“Response”接口来包装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);
    });

2 个答案:

答案 0 :(得分:1)

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

如果时间不受限制 - 我建议您同时使用IResponseIResponseConverter来分离责任和问题的更灵活的解决方案。

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

答案 1 :(得分:1)

MVC有System.Web.Mvc.JsonResult,值得一看。

您是否考虑使用动态类型?这是一个很好的总结和一种与我用过的技术非常相似的技术: http://www.drowningintechnicaldebt.com/ShawnWeisfeld/archive/2010/08/22/using-c-4.0-and-dynamic-to-parse-json.aspx