2013-09-05 38 views
33

Bạn có thể serialize một trường enum trong một mô hình WebAPI như là một chuỗi bằng cách thêm một thuộc tính:Serialize một container của enums như dây đàn sử dụng JSON.net

enum Size 
{ 
    Small, 
    Medium, 
    Large 
} 

class Example1 
{ 
    [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] 
    Size Size { get; set; } 
} 

này sẽ serialize để JSON này:

{ 
    "Size": "Medium" 
} 

Làm cách nào tôi có thể thực hiện tương tự cho một tập hợp các enums?

class Example2 
{ 
    IList<Size> Sizes { get; set; } 
} 

Tôi muốn serialize để JSON này:

{ 
    "Sizes": 
    [ 
    "Medium", 
    "Large" 
    ] 
} 

Trả lời

54

Bạn cần phải sử dụng JsonPropertyAttribute.ItemConverterType tài sản:

class Example2 
{ 
    [JsonProperty (ItemConverterType = typeof(StringEnumConverter))] 
    public IList<Size> Sizes { get; set; } 
} 
+0

Vậy làm thế nào để thực sự phổ biến 'Kích cỡ'? – Burjua

+0

Cảm ơn bạn rất nhiều, đã bị mắc kẹt trong điều này trong một ngày rưỡi – Eman

15

Tôi có điều này trong các mã khởi động của ứng dụng web của tôi để serialise tất cả enums đến chuỗi (Tôi thích đi tên enum để giá trị, làm cho mọi thứ mạnh mẽ hơn).

Phải thừa nhận tôi chưa bao giờ thử nó trên danh sách các enums mặc dù vậy tôi không biết nó sẽ làm gì với điều đó - có thể đáng để thử.

var jsonFormatter = config.Formatters.JsonFormatter; 
jsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter { CamelCaseText = true }); 
+0

Vâng, điều này sẽ làm việc với một danh sách các sự đếm. –

+0

Tôi có thể xác nhận điều này hoạt động cho một danh sách các enums. Giải pháp lý tưởng của tôi sẽ cho phép chọn tham gia trên cơ sở mỗi sản phẩm, nhưng điều này hoạt động và nó tốt hơn là không có gì. Cảm ơn! Giải pháp –

+0

@ Jon-Eric Athari cũng hoạt động và sẽ cung cấp cho bạn lựa chọn tham gia cho mỗi thuộc tính mà bạn đang tìm kiếm. –