Tengo algunos datos en un objeto C # DataSet. Puedo serializarlo ahora mismo usando un convertidor Json.net como este
DataSet data = new DataSet();
// do some work here to populate 'data'
string output = JsonConvert.SerializeObject(data);
Sin embargo, esto utiliza los nombres de propiedad de data
cuando imprime en el archivo .json. Me gustaría cambiar los nombres de las propiedades para que sean algo diferente (por ejemplo, cambiar 'foo' a 'bar').
En la documentación de Json.net , en 'Serialización y deserialización de JSON' → 'Atributos de serialización' dice "JsonPropertyAttribute ... permite personalizar el nombre". Pero no hay ejemplo. ¿Alguien sabe cómo usar un JsonPropertyAttribute para cambiar el nombre de la propiedad a otra cosa?
( Enlace directo a la documentación )
La documentación de Json.net parece ser escasa. Si tienes un gran ejemplo, intentaré que se agregue a la documentación oficial. ¡Gracias!
fuente
Respuestas:
Puede decorar la propiedad que desea controlar su nombre con el
[JsonProperty]
atributo que le permite especificar un nombre diferente:Documentación: Atributos de serialización
fuente
[JsonProperty("FooBar")]
Si no tiene acceso a las clases para cambiar las propiedades, o no desea usar siempre la misma propiedad de cambio de nombre, el cambio de nombre también se puede hacer creando un resolutor personalizado.
Por ejemplo, si tiene una clase llamada
MyCustomObject
, que tiene una propiedad llamadaLongPropertyName
, puede usar un resolutor personalizado como este ...Luego solicite la serialización y suministre el resolutor:
Y el resultado se acortará a {"Short": "prop value"} en lugar de {"LongPropertyName": "prop value"}
Más información sobre solucionadores personalizados aquí
fuente
DefaultContractResolver
debe ser puesto en el mismo conjunto, donde se utiliza el método JsonConvert.Serialize ().Todavía hay otra forma de hacerlo, que es usar una NamingStrategy particular , que se puede aplicar a una clase o una propiedad al decorarlas con
[JSonObject]
o[JsonProperty]
.Existen estrategias de nomenclatura predefinidas
CamelCaseNamingStrategy
, pero puede implementar las suyas propias.La implementación de diferentes estrategias de nombres se puede encontrar aquí: https://github.com/JamesNK/Newtonsoft.Json/tree/master/Src/Newtonsoft.Json/Serialization
fuente