2

APIから返されたjsonを解析するためにJson.Netを使用しています。

まったく同じルーチンを実行しているコンソール アプリケーションと WebApi アプリケーションがあります。

var jObject = JObject.Parse(json);

var sections = jObject
    .Values()
    .Select(x => x.Path)
    .ToList();

コンソール アプリケーションでは、これは正常に機能し、sections期待どおりです。

WebApi コントローラーで同じコードを実行すると、次の例外がスローされます。

メソッドが見つかりません: 'System.String Newtonsoft.Json.Linq.JToken.get_Path()'.

の値はjsonどちらの場合も同じです!

編集

私の「セクション」を解析して生成するメソッドは、実際には別のアセンブリにあります。

  • クラス ライブラリには、Newtonsoft.Json v 4.5.0.0 への参照があります。
  • WebApi プロジェクトには Newtonsoft.Json v 4.5.0.0 への参照があります
  • コンソール アプリケーションに Newtonsoft.Json への参照がありません
4

1 に答える 1

2

2 つのプロジェクト間で同じバージョンを使用していますか? このPathプロパティは、Json.NET 5.0 リリース 1 で追加されJTokenまし。プロジェクトの 1 つでバージョン 4.5.x を使用している場合、このプロパティは使用できません。4.5 以降の Json.NET のすべてのバージョンには、5.0.x リリースを含む 4.5.0.0のアセンブリ バージョンがあることに注意してください。アセンブリ バージョンは、Visual Studio の [プロパティ] ウィンドウに表示されるものです。したがって、それを見ている場合は、おそらく間違った情報を使用しています。実際に使用しているバージョンを特定するには、各プロジェクトで参照されている Newtonsoft.Json.dll を見つけて、そのプロパティを確認する必要があります。5.0.8.16617たとえば、最新の場合は、のようなものにする必要があります。

NuGet を使用している場合は、そこからインストールされているバージョンも確認できます。プロジェクトごとに、パッケージ マネージャー UI を開きます。左ペインで、「インストール済みパッケージ」をクリックします。中央のペインで、Json.Net をクリックします。インストールされているバージョンが右側のペインに表示されます (例: 5.0.8)。更新が必要な場合は、NuGet で簡単に行うこともできます。左側のペインで [更新] をクリックし、中央のペインで [Json.Net] を再度選択して、[更新] ボタンをクリックします。各プロジェクトには、インストールされている NuGet パッケージの独自のリストがあるため、1 つのプロジェクトでパッケージを更新しても、同じソリューション内の他のプロジェクトは自動的に更新されないことに注意してください。各プロジェクトを個別に確認する必要があります。

于 2013-11-04T18:47:29.160 に答える