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

发布于 2024-11-03 01:44:32 字数 433 浏览 0 评论 0原文

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

For my .NET/C# project, I need to use a JSON library but I should be dependent on a specific implementation. I know that there are plenty of JSON *c#* libraries out there like Json.NET, FastJson, Simple Json (simplejson.codeplex.com), etc. Now how should I abstract away different implementations so that I will be able to switch libraries in a future time. I have no control on other libraries but I have full control on my project. Looking for your opinions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

Smile简单爱 2024-11-10 01:44:32

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

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

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

Depending on your needs you can create a single entry point to whatever library you wish to use.

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

    public static T Deserialize<T>(string s)
    {
        // ...
    }
}
爱你不解释 2024-11-10 01:44:32

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

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

One way to do this would be to create an interface that all libraries have the capability of matching, then implementing a wrapper class for each that implements the interface using that particular library. Each wrapper class will have to be in a separate assembly to avoid a dependency on the wrapper class's library.

Then, when you choose an implementation at runtime, you'll do it by instantiating the wrapper class through reflection.

最好的方法是创建一个接口。

以下是我们在 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);
}

Best way is to create an interface.

Here is how we do it in 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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文