2016-06-12 2 views
1

У меня возникли проблемы с пониманием проблемы, которую я получаю с Json.Net на Mac. Я пытаюсь сериализовать/десериализовать объекты, как показано ниже.Json.Net (8.0) Ошибка при создании StringEnumConverter на Mono 4.5 Mac

Код работает без проблем в Windows, но генерирует Newtonsoft.Json.JsonException «Ошибка создания StringEnumConverter» на Mac (также показано на изображении). Я надеюсь, что кто-то увидит что-то в коде или сообщении об ошибке, которое может указать мне в правильном направлении. Объект содержит еще много полей, но ошибка звучит так, как будто это имеет какое-то отношение к перечислениям. Я строил в Xamarin 6/Mono .Net 4.5, и я использую Json.Net 8.0.3 для .Net 4.5. Любая помощь очень ценится.

Edit 1: Удаление JsonConverter (TypeOf (StringEnumConverter)) украшение исключает исключение - однако, перечислений упорядочиваются в виде целых чисел снова.

using Newtonsoft.Json; 
using Newtonsoft.Json.Converters; 

namespace Lib 
{ 
    [DataContract(IsReference = true)] 
    public class Construction : LibraryComponent 
    { 
     public Construction() { } 
     public override string ToString() { return Serialization.Serialize(this); } 

     [DataMember] 
     public string Construction { get; set; } = "defaultConstruction"; 

     ... 

     [DataMember, JsonConverter(typeof(StringEnumConverter)), DefaultValue(InConvAlgo.TARP)] 
     public InConvAlgo SurfaceConvectionModelInside { get; set; } = InConvAlgo.TARP; 

     [DataMember, JsonConverter(typeof(StringEnumConverter)), DefaultValue(OutConvAlgo.DOE2)] 
     public OutConvAlgo SurfaceConvectionModelOutside { get; set; } = OutConvAlgo.DOE2; 

     ... 

     [DataMember, DefaultValue(1)] 
     public int Priority { get; set; } = 1; 
    } 

    public enum InConvAlgo { Simple, TARP, TrombeWall, AdaptiveConvectionAlgorithm }; 
    public enum OutConvAlgo { DOE2, TARP, MoWiTT, SimpleCombined, AdaptiveConvectionAlgorithm }; // DOE-2, 

} 

enter image description here

ответ

0

я ударил это в Json.NET 9.01 с Unity3D (работает Mono). Внутреннее исключение было чем-то вроде «Без конструктора без параметров для StringEnumConverter».

Я не был полностью уверен, что происходит, но я работал вокруг этого, дублируя StringEnumConverter в свой проект под своим собственным пространством имен/сбором.

0

Недавно я столкнулся с этой проблемой. В том числе StringEnumConverter в моем источнике, как предлагает Ади Уннитан, требуется дополнительно скопировать некоторые классы Util. Не говоря уже о том, что изменение пространства имен этого класса в скопированном коде, вероятно, не связано с лицензией. Не меняя его, он ставит его в противоречие с любой другой ссылочной версией json.net.

Единственное решение, которое я мог найти, это форк Json.net и построить на Mono, а затем ссылаться на результирующую dll в главном проекте.

3

У меня была такая же проблема с моно.

Простым решением, которое работает для меня, было создание класса, наследующего от StringEnumConverter, и его использование.

Это не позволяет вам копировать исходный код этого конвертера (Json.net имеет много классов «utils»).

No more issue после этого.

Смежные вопросы