Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 应用程序中的oData反序列化问题_C#_Json_Wpf_Odata_Json Deserialization - Fatal编程技术网

C# 应用程序中的oData反序列化问题

C# 应用程序中的oData反序列化问题,c#,json,wpf,odata,json-deserialization,C#,Json,Wpf,Odata,Json Deserialization,我在WPF应用程序中引用了一个odata服务。它似乎有一个问题,反序列化一些东西。例如,下面的查询总是将主机返回为null var results = _container.HostVersions.Expand(hv => hv.Host) .Expand(hv => hv.Version.Service) .Where(hv => hv

我在WPF应用程序中引用了一个odata服务。它似乎有一个问题,反序列化一些东西。例如,下面的查询总是将主机返回为null

var results = _container.HostVersions.Expand(hv => hv.Host)
                                   .Expand(hv => hv.Version.Service)
                                   .Where(hv => hv.Version.Id == versionId &&
                                          hv.Version.Service.Id == serviceId);
但是,如果从该查询中获取生成的URL并将其粘贴到浏览器中,JSON将显示主机对象。另外,我知道主机对象在数据库中。因此,基本上由于某些原因,扩展调用中的所有对象都没有在应用程序中进行反序列化。我没有运气在谷歌或这个网站上搜索这个问题。希望以前有人碰到过

编辑:

所以在我打上述电话之前,我先打这个电话:

var result = _container.HostVersions
            .Expand(hv => hv.Host)
            .Expand(x => x.Version.Service.Versions)
            .Where(hv => hv.Host.ServerFarmEnvironment.EnvironmentId == environmentId &&
                    hv.Host.ServerFarmEnvironment.ServerFarmId == serverFarmId);

如果我把Expand for Host放在那里,如上图所示,然后调用本文中的第一个方法,就会填充Host。但是如果我从这个调用中删除Host expand,那么本文中的第一个方法的Host为null。真是太离奇了。Fiddler显示这两个响应是相同的,正如我所怀疑的,因为URL正确地解析了odata。所以这一定是一些奇怪的反序列化问题,毫无意义

我能想到3个可能的问题

您的DataServiceContext可能已过期,您是否尝试从OData服务的当前项目版本重新生成if?如果Host类上的某些属性不匹配,或者命名空间已更改/不匹配,则扩展将无法获取Host类型的任何对象

您还可以检查客户机是否识别主机类命名空间。您可以通过从服务中获取所有主机对象(如果您的模式允许)或在您的服务上创建主机类型对象的查询来实现这一点,该查询将返回一个或多个测试主机实例。如果这些都不起作用-您需要修复名称空间识别问题


另一个问题可能是MaxExpansionDepth设置为0或其他权限限制。

我可以想到3个可能的问题

您的DataServiceContext可能已过期,您是否尝试从OData服务的当前项目版本重新生成if?如果Host类上的某些属性不匹配,或者命名空间已更改/不匹配,则扩展将无法获取Host类型的任何对象

您还可以检查客户机是否识别主机类命名空间。您可以通过从服务中获取所有主机对象(如果您的模式允许)或在您的服务上创建主机类型对象的查询来实现这一点,该查询将返回一个或多个测试主机实例。如果这些都不起作用-您需要修复名称空间识别问题


另一个问题可能是MaxExpansionDepth设置为0或其他权限限制。

1。这是最新的。2.我可以在查询_container.Hosts时看到所有主机记录。3.我想最大深度大概是6。这些东西我都查过了。这真是最奇怪的事情。我忘了提到,在我试用的WinForm和Console示例应用程序中,这不是问题。就在这一个WPF应用程序中,使用fiddler检查(可能发布)发送和接收的内容如何?一个专业提示(如果您还不知道):fiddler可以自动处理.fiddler域,因此将url更改为将允许您检查原始数据包中的可疑头。此外,如果您正在使用Microsoft.OData.EntityFrameworkProvider,请检查此包的最新更新,并尝试运行更新包Microsoft.Data.OData,这可能是一个bug。所以我想出了一个方法让它工作,但它并不理想。也就是说,当我让它工作时,我做了一个小提琴手的跟踪,当我让它不工作时。除了明显的时间戳之外,这两种方法的原始响应完全相同。因此,一旦它进入.net应用程序1,它看起来一定是一些奇怪的反序列化问题。这是最新的。2.我可以在查询_container.Hosts时看到所有主机记录。3.我想最大深度大概是6。这些东西我都查过了。这真是最奇怪的事情。我忘了提到,在我试用的WinForm和Console示例应用程序中,这不是问题。就在这一个WPF应用程序中,使用fiddler检查(可能发布)发送和接收的内容如何?一个专业提示(如果您还不知道):fiddler可以自动处理.fiddler域,因此将url更改为将允许您检查原始数据包中的可疑头。此外,如果您正在使用Microsoft.OData.EntityFrameworkProvider,请检查此包的最新更新,并尝试运行更新包Microsoft.Data.OData,这可能是一个bug。所以我想出了一个方法让它工作,但它并不理想。也就是说,当我让它工作时,我做了一个小提琴手的跟踪,当我让它不工作时。除了明显的时间戳之外,这两种方法的原始响应完全相同。因此,一旦它进入.net应用程序1,它看起来一定是一些奇怪的反序列化问题。这是最新的。2.我可以在查询_container.Hosts时看到所有主机记录。3.我想最大深度大概是6。这些东西我都查过了。这真是最奇怪的事情。我忘了提到,在我试用的WinForm和Console示例应用程序中,这不是问题。就在这一个WPF应用程序中,使用fiddler检查(可能发布)发送和接收的内容如何?一个专业提示(如果您还不知道):fiddler可以自动处理.fiddler域,因此将url更改为将允许您检查原始数据包中的可疑头。此外,如果您正在使用Microsoft.OData.EntityFrameworkProvider,请检查此包的最新更新,并尝试运行更新包Microsoft.Data.OData,这可能是一个bug。所以我想出了一个方法让它工作,但它并不理想。也就是说,当我让它工作时,我做了一个小提琴手的跟踪,当我让它不工作时。除了明显的时间戳之外,这两种方法的原始响应完全相同。因此,一旦它进入.net应用程序,似乎一定会出现一些奇怪的反序列化问题。