C#JsonConverter有时会丢失对原始实例的引用

问题描述

我正在将自定义JsonConverters与RavenDB一起使用,以便在保存/检索时写入/读取引用。另外,我正在处理的实体是一个嵌套结构,该结构开始使用这些引用填充自身,再次调用RavenBroker,并再次执行JsonConverter,依此类推。

这就是为什么当我创建JsonConverter实例时,我将代理的实例作为参数发送

public AbstractRuleBroker()
        {
            this.CustomConverters = new List<AbstractConverter<AbstractRule>> { new RuleSetConverter( this ) };
        }

JsonConverter construction

在这里您可以看到在反序列化对象时我如何使用该代理查找那些引用 JsonConverter ReadJson method

由于业务逻辑的原因,我需要存储在经纪人财产中的原始调用中的特定值。

问题在于,对于某些执行(相同的方法,相同的参数,我使用邮递员调用API),该属性会以null的形式到达那里,有时它应该具有该值。

在这里我分配该值 FilteredVersion assignment

第一次调用,一切都很好。值在那里。 1st invocation debug results

第二次调用,null。 2nd invocation debug results

我发现,在调试时,在这些值为null的情况下,从Broker的角度执行GetHashCode()方法将返回不同的内存地址。这使我想到,添加自定义转换器时,如果在序列化器中没有正确设置某些内容。 (也许是ContractResolver?)

this.Connection.Conventions.CustomizeJsonSerializer = serializer =>
                {
                    serializer.TypeNameHandling = TypeNameHandling.Auto;
                    if( !( converters is null ) )
                    {
                        GetCustomConverters().ForEach( c => serializer.Converters.Add( c ) );    
                    }
                };

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...