2011-10-25 14 views
2

I以下のJSONがありますエラーデシリアライズJSONは型にJSONオブジェクトをデシリアライズすることはできません '可能System.String'

class objSON { 
     public string workspace { get; set; } 
     public string name { get; set; } 
     public string dataStores { get; set; } 
     public string coverageStores { get; set; } 
     public string wmsStores { get; set; }} 

objWS_JSON deserContWS = JsonConvert.DeserializeObject<objWS_JSON>(data); 
      var coberturas = deserContWS.coverageStores; 
      var almacenesDatos = deserContWS.dataStores; 
      var almacenesWMS = deserContWS.wmsStores; 
      var nombre = deserContWS.name; 

と私:

{"workspace": { 
    "name":"Dallas", 
    "dataStores":"http://.....:8080/geoserver/rest/workspaces/Dallas/datastores.json", 
    "coverageStores":"http://.....:8080/geoserver/rest/workspaces/Dallas/coveragestores.json", 
    "wmsStores":"http://....:8080/geoserver/rest/workspaces/Dallas/wmsstores.json"}} 

そして - 私は、このクラスをintデシリアライズしようとしています次のエラーが発生します。

JSONオブジェクトをタイプ「System.String」にデシリアライズできません。

それは仕事やないでしょうか - JSONの構造と一致して非常に少なくとも

class Container { 
    public Workspace workspace { get; set; } 
} 

class Workspace { 
    public string name { get; set; } 
    public string dataStores { get; set; } 
    public string coverageStores { get; set; } 
    public string wmsStores { get; set; } 
} 

:あなたのような何かを持っている必要がありますので、おかげでJSONで

答えて

6

あなたのJSONはあなたが提供してきたクラス構造のため間違っている:私はあなたのオブジェクトは、より多くのようなものを見て期待します。 jsonは、name、dataStores、coverageStoresおよびwmsSToresはワークスペースクラスの子であることを示しています。私はあなたが欲しいクラス構造はこのだと思う:

public class workspace 
{ 
    public string name { get; set; } 
    public string dataStores { get; set;} 
    public string coverageStores { get; set;} 
    public string wmsStores {get; set;} 
} 

public class objSON 
{ 
    public workspace workspace {get; set;} 
} 

は、そのデータ構造は、あなたがあなたのJSONを変更する必要があります後、あなたが何であるかではない場合、ことをしてみてください。

私はサンプルアプリケーションで試したところ、うまく動作しているようです。ここで私が使用したコードは次のとおりです。

class Program 
    { 
      static void Main(string[] args) 
      { 

       string str = @"{""workspace"": { 
        ""name"":""Dallas"", 
        ""dataStores"":""http://.....:8080/geoserver/rest/workspaces/Dallas/datastores.json"", 
        ""coverageStores"":""http://.....:8080/geoserver/rest/workspaces/Dallas/coveragestores.json  "", 
        ""wmsStores"":""http://....:8080/geoserver/rest/workspaces/Dallas/wmsstores.json""}}"; 

       var obj = JsonConvert.DeserializeObject<objSON>(str); 

    } 

} 

public class workspace 
{ 
    public string name { get; set; } 
    public string dataStores { get; set; } 
    public string coverageStores { get; set; } 
    public string wmsStores { get; set; } 
} 

public class objSON 
{ 
    public workspace workspace { get; set; } 
} 
+0

あなたの答えをありがとう、私はエラーを解決しますが、私の要素はnullです – JMG

+0

ここにシリアル化コードを入れてください。 –

+0

objWS_JSON deserContWS = JsonConvert.DeserializeObject (data); var coberturas = deserContWS.coverageStores; var almacenesDatos = deserContWS.dataStores; var almacenesWMS = deserContWS.wmsStores; var nombre = deserContWS.name; – JMG

3

は、workspaceは、すべての残りの部分が含まれています別の問題です:)

+0

だから 'JsonConvert.DeserializeObject (data);'? –

+0

@RoyiNamir:うん、そうだと思うよ。 –

+0

ありがとうございます、データで私はこのJSONのスラッシュを/ – JMG

0

JSONオブジェクトを見ると({}を少し明確にレイアウトした方が良いかもしれません)、そのデータをすべてシリアル化しようとしていることがわかりますworkspaceフィールドではなく他の特性。

{ 
    "workspace": "whatever", 
    "name":"Dallas", 
    "dataStores":"http://.....:8080/geoserver/rest/workspaces/Dallas/datastores.json", 
    "coverageStores":"http://.....:8080/geoserver/rest/workspaces/Madrid/coveragestores.json", 
    "wmsStores":"http://....:8080/geoserver/rest/workspaces/Madrid/wmsstores.json" 
} 
+0

ありがとうございました編集Moo-juice – JMG

関連する問題