2016-06-12 24 views
1

我無法理解我在Mac上使用Json.Net時遇到的問題。 我想序列化/反序列化下面的對象。Json.Net(8.0)在Mono 4.5 Mac上創建StringEnumConverter時出錯

該代碼在Windows上運行時沒有問題,但在Mac上生成Newtonsoft.Json.JsonException「Error creating StringEnumConverter」(也在圖中顯示)。我希望有人在代碼或錯誤消息中看到某些東西,這可能會指向正確的方向。 該對象包含更多的字段,但錯誤聽起來像它與枚舉有關。我在Xamarin 6/Mono .Net 4.5中構建,我正在使用Json.Net 8.0.3進行.Net 4.5。任何幫助不勝感激。

編輯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

我用Unity3D(運行單聲道)打這Json.Net 9.01。內部異常就像'StringEnumConverter'沒有無參數構造函數'。

我並不完全確定發生了什麼,但我通過在我自己的命名空間/程序集下將StringEnumConverter複製到我的項目中來解決此問題。

0

我最近遇到了同樣的問題。按照Adi Unnithan的建議,在我的源代碼中包含StringEnumConverter,要求您額外複製一些Util類。更不用說,在複製的代碼中更改該類的名稱空間,可能不會與許可證混在一起。不改變它與json.net的任何其他引用版本的爭用。

我能找到的唯一解決方案是分叉Json.net並在Mono上構建,然後在主項目中引用生成的dll。

3

我對mono有同樣的問題。

對我來說一個簡單的解決方法是創建一個從StringEnumConverter繼承並使用它的類。

避免您複製此轉換器的源代碼(Json.net有很多「utils」類)。

之後沒有更多的問題。