2011-10-17 12 views
18

używam JSON.net (może v3.5ish? It's from oct. 2010). i staram się deserializowania pewne json do wyliczenia:parsowanie wyliczenia w JSON.net

geometryType: "esriGeometryPolygon"

mam tej liczby:

/// <summary> 
/// The geometry type. 
/// </summary> 
[DataContract] 
public enum GeometryType 
{ 
    /// <summary> 
    /// Refers to geometry type Envelope 
    /// </summary> 
    [EnumMember(Value = "esriGeometryEnvelope")] 
    Envelope, 
    /// <summary> 
    /// Refers to geometry type MultiPoint 
    /// </summary> 
    [EnumMember(Value = "esriGeometryMultipoint")] 
    MultiPoint, 
    /// <summary> 
    /// Refers to geometry type MapPoint 
    /// </summary> 
    [EnumMember(Value = "esriGeometryPoint")] 
    Point, 
    /// <summary> 
    /// Refers to geometry type Polygon 
    /// </summary> 
    [EnumMember(Value = "esriGeometryPolygon")] 
    Polygon, 
    /// <summary> 
    /// Refers to geometry type Polyline 
    /// </summary> 
    [EnumMember(Value = "esriGeometryPolyline")] 
    Polyline 
} 

ale zgłasza błąd mówiący "Błąd konwersji wartość" esriGeometryPolygon "wpisać«... GeometryType».

czego mi brakuje tutaj?

jest, bo to jest stara wersja (używam mon otouch port: https://github.com/chrisntr/Newtonsoft.Json, który nie był aktualizowany od roku)? lub czy mój błąd w danych jest błędny?


EDYCJA: przeniesiono najnowszy JSON.NET do MT i nadal otrzymuję dokładnie ten sam błąd.

+0

Jakakolwiek różnica, jeśli zmienisz nazwy wyliczeń w C#, aby dokładnie pasowały do ​​JSON? (Zamiast próbować użyć atrybutu EnumMember) – jonathanpeppers

+0

Jonathan, wydaje się, tak. –

Odpowiedz

37

Według dokumentacji Json.NET, domyślne zachowanie jest użycie int wartości dla wyliczenia: http://james.newtonking.com/projects/json/help/SerializationGuide.html

Można to zmienić poprzez dodanie przyporządkowują JsonConverter z StringEnumConverter na wyliczenia ...

/// <summary> 
/// The geometry type. 
/// </summary> 
[DataContract] 
[JsonConverter(typeof(StringEnumConverter))] 
public enum GeometryType 

Dokumentacja: Serialize with JsonConverters

+1

Bingo. To powinno być oflagowane jako poprawna odpowiedź. – HolySamosa

+6

Alternatywnie, jeśli chcesz uniknąć sprzężenia między DTO a Json.Net, możesz dodać konwerter na poziomie serializera: var serializer = new JsonSerializer(); serializer.Converters.Add (new StringEnumConverter()); – Mose