我有一个干净的可再发行模型,其中包含许多派生类。为了清楚起见,请参见下面的示例。
class Foo
{
...
}
class BarA:Foo
{
...
}
class BarB:Foo
{
...
}
为了将这些类从Json反序列化为正确的类(例如BarA,而不仅仅是Foo),我通过继承JsonConverter创建了自己的转换器。它非常适合我的应用程序,但这要求其他使用此库的人编写自己的转换器。我不想将转换器包含到我的模型中,因为这将创建对JSON.NET的依赖关系,并且当使用该解决方案的解决方案中的项目具有不同版本的JSON.NET时,从那里就会崩溃。
是否有任何干净的方法可以做到这一点,而又不会污染纯.NET模型?
答案 0 :(得分:1)
如果您不使用序列化属性,则您的POCO对JSON.Net没有任何依赖。 (至少不要在OP中执行此操作)。调用反序列化器时,可以将可用转换器的列表传递给Deserialize方法。您可以在服务中包装对JSON.Net的依赖关系,但在POCO之外始终会对JSONConverter保持某种依赖关系
伪C#
JsonConvert.DeserializeObject<YourPOCO>(yourJsonString, new YourFancyConverter())
答案 1 :(得分:0)
基于Georgi Georgievs的答案,我创建了一个单独的服务库,该服务库通过选择正确的转换器来处理所有反序列化。该库既有优势,也有缺陷: