2016-06-13 82 views
3

我試圖使用Newtonsoft的JsonConvert將對象列表序列化爲JSON。我的Marker類包含一個枚舉,並且我試圖將它序列化爲camelCase字符串。根據其他問題#1,我試圖使用StringEnumConverter如何將屬性傳遞給JsonConverterAttribute中的StringEnumConverter

public enum MarkerType 
{ 
    None = 0, 
    Bookmark = 1, 
    Highlight = 2 
} 

public class Marker 
{ 
    [JsonConverter(typeof(StringEnumConverter)] 
    public MarkerType MarkerType { get; set; } 
} 

這部分工作,但我MarkerType字符串是PascalCase當我打電話:

var json = JsonConvert.SerializeObject(markers, Formatting.None); 

結果:

{ 
    ..., 
    "MarkerType":"Bookmark" 
} 

我真正想要的是:

{ 
    ..., 
    "MarkerType":"bookmark" 
} 

StringEnumConverter docs提到一個CamelCaseText財產,但我不知道如何通過使用JsonConverterAttribute。下面的代碼失敗:

[JsonConverter(typeof(StringEnumConverter), new object[] { "camelCaseText" }] 

如何在JsonConverterAttribute指定CamelCaseText屬性爲StringEnumConverter

回答

7

JsonConverterAttribute有兩個構造函數,其中一個需要參數列表(Object[])。這映射到類型的構造函數

由於StringEnumConverter's constructors一個採用布爾爲camelCaseText,你只需要通過在屬性行:

[JsonConverter(typeof(StringEnumConverter), new object[] { true }] 
public MarkerType MarkerType { get; set; } 

注意,這是僅限於只構造;無法使用JsonConverterAttribute語法在StringEnumConverter上設置AllowIntegerValues,因爲唯一的非默認構造函數僅爲camelCaseText使用參數。

相關問題