C# JSON.NET转换器:如果缺少给定值,请使用默认反序列化

C# JSON.NET转换器:如果缺少给定值,请使用默认反序列化,c#,json.net,C#,Json.net,我有一个Delphi和.NET都知道的COM接口。 NET和Delphi类都实现了这个接口 我在反序列化期间使用转换器,能够检测要实例化的类是.net还是delphi类 对于Delphi类来说,一切都很好。 但是,如果需要安装.NET类,我需要能够创建和填充.NET对象 请参阅下面的代码片段 class DelphiTypesJsonConverter : Newtonsoft.Json.JsonConverter { private const string XMLKEY =

我有一个Delphi和.NET都知道的COM接口。 NET和Delphi类都实现了这个接口

我在反序列化期间使用转换器,能够检测要实例化的类是.net还是delphi类

对于Delphi类来说,一切都很好。 但是,如果需要安装.NET类,我需要能够创建和填充.NET对象

请参阅下面的代码片段

  class DelphiTypesJsonConverter : Newtonsoft.Json.JsonConverter
  {
    private const string XMLKEY = "__XML";

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
      var jObject = JObject.Load(reader);
      var xmlBlob = jObject.GetValue(XMLKEY);
      if (xmlBlob != null)
      {
        var delphiObject = CreateDelphiCOMObject(xmlBlob);// Object will be created in Delphi. This works!
        return delphiObject;
      }

      // The implementing class is a .NET class
      // Just proceed with the default behaviour based on the $type identifier.
      // How can I now create the type that would have been created if this converter would have not been executed.

      return ????;   
    }
  }
编辑

与此同时,我发现

return serializer.Deserialize(reader);
返回的正是我需要的。但这只有在我没有打电话的情况下才有效:

JObject.Load(reader);
以前。 但我需要调用JObject.Loadreader来确定是处理Delphi还是.NET对象。
越来越近了……

下面的方法很有效。我在这上面花了好几个小时

   public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
      var jToken = JToken.Load(reader);
      if (jToken.HasValues)
      {
        var xmlBlob = jToken[XMLKEY];
        if (jToken.First.Path == XMLKEY)
        { 
          var delphiObject = CoreFactory.CrossPlatformProperties.DeserializeDelphiObject(xmlBlob.Value<string>());
          return delphiObject;
        }
      }
      return serializer.Deserialize(jToken.CreateReader());
    }

如果只使用var xmlBlob=jToken[XMLKEY],会怎么样?这样,您就不需要从新的读者那里加载JObject了。@Brian,谢谢!你赢了我,这就成功了!!我只是在深入挖掘JToken…没问题;很高兴我能帮忙。