Как абстрагироваться от различных реализаций библиотеки JSON - PullRequest
2 голосов
/ 23 апреля 2011

Для моего проекта .NET / C # мне нужно использовать библиотеку JSON , но я должен зависеть от конкретной реализации. Я знаю, что существует множество JSON * c # * библиотек, таких как Json.NET , FastJson , Simple Json ( simplejson.codeplex.com ) и т. Д. Теперь, как я должен абстрагироваться от различных реализаций, чтобы в будущем я мог переключать библиотеки. У меня нет контроля над другими библиотеками, но у меня есть полный контроль над моим проектом. Ищете ваши мнения.

Ответы [ 3 ]

3 голосов
/ 23 апреля 2011

В зависимости от ваших потребностей вы можете создать единую точку входа в любую библиотеку, которую вы хотите использовать.

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

    public static T Deserialize<T>(string s)
    {
        // ...
    }
}
1 голос
/ 27 апреля 2011

Лучший способ - создать интерфейс.

Вот как мы это делаем в 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);
}
1 голос
/ 23 апреля 2011

Один из способов сделать это - создать интерфейс, который все библиотеки имеют возможность сопоставления, а затем реализовать класс-оболочку для каждой, которая реализует интерфейс с использованием этой конкретной библиотеки.Каждый класс-обертка должен находиться в отдельной сборке, чтобы избежать зависимости от библиотеки класса-обертки.

Затем, когда вы выбираете реализацию во время выполнения, вы делаете это путем создания экземпляра класса-обертки посредством отражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...