У меня есть следующий объект:Почему 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.
I «В последний час мы пытались выяснить, откуда происходит зависимость или почему 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)
..но почему это принять этот маршрут?
Update
Простой тест также не:
[Fact]
public void should_be_Able_to_Serialize_settings()
{
JsonConvert.SerializeObject(new ProjectInfo {ConnectionStringName = "Arne"});
}
Update 2
Этот проект работал раньше. Он также работает на компьютере коллеги. Единственное различие, которое я вижу, это то, что я обновился до VStudio 2015 Обновление 1. (или что я сделал глупую ошибку где-то). Но я также сделал жесткий сброс до последней версии, которую использует мой коллега.
Почему он пытается ссылаться на v5.0.5 of System.Linq.Xml? Не является ли v4.0.0 стандартным для .NET 4.5? К какой версии .NET относится v5.0.5?
(я никогда не имел подобную проблему с Json.NET раньше. Это что-то с VStudio 2015/.NET 4.5.2/VSIX проект?)
Update3
Здесь являются зависимостями. Они показывают, что Json.NET пытается ссылаться, что точной версии:
Update:
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:
Моя проблема заключается в том, что расширение не работает, поскольку оно пытается загрузить сборку, которая не существует. По моему мнению, v5.0.5 является сборкой silverlight. И я не использую 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>
Вы можете показать короткую, но полную программу, которая демонстрирует проблему? Что находится в 'настройках'? –
newtonsoft.json v7.0.1 через nuget – jgauffin
Я получил обновление VStudio 2015 1 – jgauffin