如何抽象出不同的JSON库实现

时间:2011-04-23 19:44:28

标签: c# .net json

对于我的 .NET / C#项目,我需要使用 JSON 库,但我应该依赖于特定的实现。我知道有很多 JSON * c# *库,例如Json.NETFastJson,简单 Json simplejson.codeplex.com)等。现在我应该如何抽象出不同的实现,以便我能够在将来的时间内切换库。我无法控制其他库,但我可以完全控制我的项目。寻找你的意见。

3 个答案:

答案 0 :(得分:3)

根据您的需要,您可以为您想要使用的任何库创建一个入口点。

public static class Json
{
    public static string Serialize(object o)
    {
        // ...  
    }

    public static T Deserialize<T>(string s)
    {
        // ...
    }
}

答案 1 :(得分:1)

这样做的一种方法是创建一个所有库都具有匹配能力的接口,然后为每个使用该特定库实现接口的实现包装类。每个包装类都必须在一个单独的程序集中,以避免依赖于包装类的库。

然后,当您在运行时选择实现时,您将通过反射实例化包装类来实现。

答案 2 :(得分:1)

最好的方法是创建一个界面。

以下是我们在Facebook C#SDK(http://facebooksdk.codeplex.com)

中的表现
public interface IJsonSerializer
{
    string SerializeObject(object obj);
    object DeserializeObject(string json, Type type);
    T DeserializeObject<T>(string json);
    object DeserializeObject(string json);
}