我有一个使用 Json.NET 的 C# 服务器,而另一方面是一个使用 Jackson 的 JAVA/Android 应用程序。
我序列化和反序列化一个名为 ProtocolContainer 的对象,该对象除其他外包含一个名为“SubPacket”的属性:
public class ProtocolContainer
{
public DataPacket SubPacket { get; set; }
// ...
}
有许多类继承了“DataPacket”,因此当我从任何地方收到 JSON 字符串时,我需要能够将 SubPacket 反序列化为正确的子类。
这在我切换到 Json.NET 之前运行良好(当我使用 DataContractJsonSerializer 时),但在切换之后我还没有真正能够反序列化来自 Android 设备的数据。
我怀疑这与我没有从 JAVA 发送“限定类型名称”这一事实有关,我也不想这样做。可以发送名称,例如:
"$type":"my.namespace.classname"
但是发送所有与 .NET 相关的臃肿的“合格类型名称”是不行的。
现在我得到一个 JsonSerializationException。这是 JSON 的简化版本:
{
"SubPacket":{
"$type":"my.namespace.myClass",
"HardwareId":"a5af9321038c38dc"
},
}
即使该类存在于 .NET 端,它也无法对其进行反序列化,并出现以下错误:
{Newtonsoft.Json.JsonSerializationException:JSON 'my.namespace.myClass' 中指定的类型未解析。路径“SubPacket.$type”,第 1 行,位置 138。在 ...
如前所述,我不想写出整个汇编字符串,这对于硬编码到 JAVA 应用程序来说既长又奇怪。
感谢您的任何提示和指示=)