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; }
}