Mam następujący obiekt:Dlaczego Json.NET wymaga System.Xml.Linq v5.0.5 do serializacji prostego obiektu?
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; }
}
Który próbuję zrobić prosty szeregowanie (w VSIX projektu):
var settings = new ProjectInfo { ConnectionStringName = "SomeName" };
var json = JsonConvert.SerializeObject(settings);
który daje mi:
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.
I Spędziliśmy ostatnią godzinę, próbując dowiedzieć się, skąd pochodzi ta zależność lub dlaczego Json.NET próbuje użyć tej przestrzeni nazw. System.Xml.Linq nie jest wymieniony w żadnym z moich projektów.
Od ślad stosu widzę:
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)
..ale dlaczego trwa tej trasie?
Aktualizacja
prosta sprawa test nie powiedzie się również:
[Fact]
public void should_be_Able_to_Serialize_settings()
{
JsonConvert.SerializeObject(new ProjectInfo {ConnectionStringName = "Arne"});
}
Aktualizacja 2
Projekt ten pracował wcześniej. Działa również na komputerze kolegi. Jedyną różnicą, jaką widzę, jest uaktualnienie do wersji VStudio 2015 Update 1. (lub że popełniłem głupią pomyłkę gdzieś). Ale również wykonałem twardy reset do najnowszej wersji, z której korzysta mój kolega.
Dlaczego próbuje odwoływać się do wersji 5.0.5 pliku System.Linq.Xml? Czy v4.0.0 nie jest standardem dla .NET 4.5? Do której wersji .NET należy v5.0.5?
(nigdy nie miałem podobny problem z Json.NET wcześniej. Czy to coś z VStudio 2015/.NET 4.5.2/VSIX projekt?)
Update3
Tutaj są zależnościami. Pokazują one, że Json.NET próbuje odwoływać że dokładnej wersji:
Aktualizacja:
Json.NET odniesienia w pliku projektu:
<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>
Edycja 4:
Mój problem polega na tym, że rozszerzenie nie działa, ponieważ próbuje załadować złożenie, które nie istnieje. Z mojego rozumienia, v5.0.5 jest zgromadzeniem silverlight. I nie używam silverlight.
Próbowałem dodać przekierowanie zespołu, ale nie wydaje się działać.
<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>
Czy możesz pokazać krótki, ale kompletny program, który pokazuje problem? Co zawiera "ustawienia"? –
newtonsoft.json v7.0.1 via nuget – jgauffin
Mam aktualizację VStudio 2015 1 – jgauffin