【发布时间】:2019-01-30 11:02:02
【问题描述】:
我正在构建一个供多个应用程序使用的新 NuGet 包。这个包做了很多东西和一些 JSON 工作,所以最初我使用了 newtonsoft.json 包。但是,我发现我工作的公司内部的许多应用程序使用不同版本的 newtonsoft.json,或者它们完全使用不同的库来处理 JSON。
为了消除对 newtonsoft.json 的依赖,我创建了一个需要用户实现的接口。它有一个类,如下所示:
public interface IJsonConverter
{
// this function needs to convert the object to a JSON string
string SerializeObject(object data);
// this function returns an object for the supplied JSON string
T DeserializeObject<T>(string value);
}
每个应用程序都可以很容易地实现,例如:
public class JsonConverter:IJsonConverter
{
public string SerializeObject(object data)
{
return JsonConvert.SerializeObject(data);
}
public T DeserializeObject<T>(string value)
{
return JsonConvert.DeserializeObject<T>(value);
}
}
这意味着使用我的 nuget 包的每个应用程序都不必担心这种依赖关系,也不必搞乱绑定重定向或陷入 DLL 地狱。
这种方法会导致更多问题吗?它是反模式吗?有没有更好的方法?
【问题讨论】:
-
你的 nuget 包会依赖 Newtonsoft 吗?
-
如果没有 Json 序列化属性,你的生活会很艰难,所以......
-
确实这是一个选项,您可能能够删除对 Newtonsoft.JSON 库的依赖...无法查看这种方法是否良好(解决您的问题)...如果您对这种方法会使问题的范围更广/更容易回答。
-
如果每个应用有不同的 json 序列化器,那么使用接口是正确的方法。这就是接口的用途。
-
如果 your nuget 包正在做一些 JSON 工作,你是怎么做的?还是您的 JSON 工作是抽象的,客户端需要实现它?或者你只是在你的包中暴露一个接口?
标签: c# dependencies nuget