私は、次のオブジェクトがあります。Json.NETは単純なオブジェクトのシリアライズにSystem.Xml.Linq v5.0.5を必要とするのはなぜですか?
public class ProjectInfo
{
public string ConnectionStringName { get; set; }
public string DefaultEntityNamespace { get; set; }
public string DefaultSharedNamespace { get; set; }
public string DefaultTestNamespace { get; set; }
public string SqlProviderName { get; set; }
}
私は(VSIXプロジェクト内)の簡単なシリアライズを行うにしてみてください。
var settings = new ProjectInfo { ConnectionStringName = "SomeName" };
var json = JsonConvert.SerializeObject(settings);
私を与える:
An exception of type 'System.IO.FileNotFoundException' occurred in Newtonsoft.Json.dll but was not handled in user code
Additional information: Could not load file or assembly 'System.Xml.Linq, Version=5.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
を私は最後の1時間は、依存関係がどこから来るのか、Json.NETがその名前空間を使用しようとする理由を理解しようとしていました。私のプロジェクトでSystem.Xml.Linqは参照されていません。私が見ることができるスタックトレースから
:
at Newtonsoft.Json.Converters.XmlNodeConverter.CanConvert(Type valueType)
at Newtonsoft.Json.JsonSerializer.GetMatchingConverter(IList`1 converters, Type objectType)
at Newtonsoft.Json.Serialization.DefaultContractResolver.InitializeContract(JsonContract contract)
at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(Type objectType)
at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(Type objectType)
at Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(Type type)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)
at Newtonsoft.Json.JsonConvert.SerializeObjectInternal(Object value, Type type, JsonSerializer jsonSerializer)
at Newtonsoft.Json.JsonConvert.SerializeObject(Object value)
..butなぜそれがそのルートを取るのでしょうか?
更新
簡単なテストケースも失敗します。このプロジェクトは、以前に働いている2
[Fact]
public void should_be_Able_to_Serialize_settings()
{
JsonConvert.SerializeObject(new ProjectInfo {ConnectionStringName = "Arne"});
}
を更新。同僚のコンピュータでも動作します。私が見ることのできる唯一の違いは、VStudio 2015 アップデート1にアップグレードしたことです。 (か、私はどこかで愚かな間違いをしたことがあります)。しかし、私はまた、私の同僚が使用している最新のリビジョンをハードリセットしました。
なぜSystem.Linq.Xmlのv5.0.5を参照しようとしていますか? v4.0.0は.NET 4.5の標準ではありませんか? v5.0.5はどのバージョンの.NETに属していますか?
(私が前にJson.NETと同様の問題を抱えていたことがありません。それはVStudio 2015/.NET 4.5.2/VSIXプロジェクトで何かですか?)
Update3と
ここ依存関係です。
更新:
プロジェクトファイルにJson.NET参照:
<Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=c70b2336aed9f731, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
編集4:
彼らはJson.NETが正確なバージョンことを参照しようとすることを示して私の問題は、存在しないアセンブリを読み込もうとすると拡張機能が動作しないということです。私の理解から、v5.0.5はSilverlightアセンブリです。私はシルバーライトを使用していません。
アセンブリのリダイレクトを追加しようとしましたが、動作しないようです。
<dependentAssembly>
<assemblyIdentity name="System.Xml.Linq" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-5.0.5.0" newVersion="4.0.0.0"/>
</dependentAssembly>
問題を示す短い完全なプログラムを表示できますか? 'settings'には何がありますか? –
newtonsoft.json v7.0.1 via nuget – jgauffin
私はVStudio 2015アップデート1を持っています – jgauffin