2015-06-15 58 views
1

我有一個我在WPF應用程序中引用的odata服務。它似乎有一個問題反序列化一些事情。例如,下面的查詢總是以空值返回主機。應用程序中的數據反序列化問題

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顯示主機對象。另外,我知道Host對象在數據庫中。所以基本上由於某種原因,並不是所有Expand調用中的對象都在應用程序中被反序列化。我無法在谷歌或本網站上搜索此問題。希望以前有人遇到過這個問題。

編輯:

所以我作出上述呼籲之前,我做這樣的判斷:

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); 

如果我把展開在那裏主機,如上面看到的,然後調用在第一種方法這個帖子,主持人是填充。但是,如果我從此調用中刪除了主機擴展,則此主題中的第一個方法對於主機爲空。它真的很奇怪。提琴手錶明,這兩個迴應是相同的,因爲我認爲URL正確解析的odata。所以它必須是一些奇怪的反序列化問題,這是毫無意義的。

回答

0

我能想到3個可能的問題。

您的DataServiceContext可能已過時,您是否嘗試過從當前項目版本的OData服務重新生成?如果Host類的某些屬性不匹配,或者命名空間已更改/不匹配 - Expand將無法獲取Host類型的任何對象。

此外,您可以檢查客戶端是否識別主機類名稱空間。您可以通過從服務中獲取所有主機對象(如果您的模式允許這樣做),或者爲您的服務上的主機類型對象創建查詢來返回一個或多個測試主機實例。如果這些不起作用 - 您需要修復名稱空間識別問題。

另一個問題可能是MaxExpansionDepth設置爲0或其他權限限制。

+0

1.它是最新的。 2.當我剛剛查詢_container.Hosts時,我可以看到所有主機記錄。 3.我相信最大深度是6英寸。 我檢查了所有這些東西。這真的是最奇怪的事情。我忘了提及這在我嘗試使用的示例WinForm和控制檯應用程序中不存在問題。就在我擁有的這個WPF應用程序中。 –

+0

如何檢查(也許張貼)什麼是使用提琴手發送和接收?專業提示(如果您還不知道):fiddler可以自動處理.fiddler域,因此將您的url更改爲http://localhost.fiddler/service/thisisme.svc將允許您檢查原始數據包的可疑標題。 – too

+0

此外,如果您使用Microsoft.OData.EntityFrameworkProvider檢查此軟件包的最新更新並嘗試運行Update-Package Microsoft.Data.OData,它可能是一個錯誤。 – too