serialize newtonsoft newton net jsonconvert example deserialize json.net

json.net - newtonsoft - serialize json to object c#



Usando Json.NET, deserialize a una propiedad pero tiene un nombre numérico (1)

Con mucho, la solución más simple es usar un diccionario en lugar de un objeto:

public class neighbourhoodcrimes { public String commentary { get; set; } public Dictionary<string, month> crimes { get; set; } }

Alternativamente, si lo desea, puede proporcionar un nombre explícitamente:

public class crimes { [JsonProperty("2010-12")] public month _2010_12 { get; set; } }

De forma alternativa, si puede utilizar restsharp para usar un JsonSerializer le proporcione, puede hacer el nombre de nuevo mapeo genérico:

var serializer = new JsonSerializer { ContractResolver = new HyphenContractResolver() }; using (var reader = new JsonTextReader(new StringReader(TestData2))) { var crimes = serializer.Deserialize<neighbourhoodcrimes>(reader); ... } class HyphenContractResolver : Newtonsoft.Json.Serialization.DefaultContractResolver { protected override string ResolvePropertyName(string propertyName) { return propertyName.TrimStart(''_'').Replace(''_'', ''-''); } }

Pero en este caso, eso rompe category.crime_rate reasignando también a crime-rate , que no le permite anular con JsonProperty . Tal vez esto se pueda resolver con una implementación de nivel inferior de IContractResolver , pero eso se pone muy IContractResolver muy rápido. Y luego está implementando JsonConvert , pero eso puede ser aún más peludo.

Tengo el Json

{ "commentary": null, "crimes": { "2010-12": { "anti-social-behaviour": { "crime_rate": "0.08", "crime_level": "below_average", "total_crimes": 47 } } }

}} "

Usando Json.net para deserializarlo, bien restsharp que usa json.net. pero no se asignará a mis clases ya que no puedo poner una propiedad llamada 2010-12 ya que el framework .net no permite esto.

¿Alguna idea?

Actualmente tengo

public class neighbourhoodcrimes { public String commentary { get; set; } public crimes crimes { get; set; } } public class crimes { public month _2010_12 { get; set; } } public class month { public category anti_social_behaviour { get; set; } public category other_crime { get; set; } public category all_crime { get; set; } public category robbery { get; set; } public category burglary { get; set; } public category vehicle_crime { get; set; } public category violent_crime { get; set; } } public class category { public String crime_rate { get; set; } public String crime_level { get; set; } public String total_crimes { get; set; } }