Eu tenho alguns dados em um objeto C # DataSet. Eu posso serializá-lo agora usando um conversor Json.net como este
DataSet data = new DataSet();
// do some work here to populate 'data'
string output = JsonConvert.SerializeObject(data);
No entanto, isso usa os nomes de propriedades data
ao imprimir no arquivo .json. Gostaria de mudar o nome da propriedade para algo diferente (digamos, mude 'foo' para 'bar').
Na documentação do Json.net , em 'Serializando e desserializando JSON' → 'Serialization Attributes', ele diz "JsonPropertyAttribute ... permite que o nome seja personalizado". Mas não há exemplo. Alguém sabe como usar um JsonPropertyAttribute para alterar o nome da propriedade para outra coisa?
( Link direto para a documentação )
A documentação do Json.net parece ser escassa. Se você tiver um ótimo exemplo, tentarei adicioná-lo à documentação oficial. Obrigado!
fonte
Respostas:
Você pode decorar a propriedade que deseja controlar seu nome com o
[JsonProperty]
atributo que permite especificar um nome diferente:Documentação: Atributos de serialização
fonte
[JsonProperty("FooBar")]
Se você não tem acesso às classes para alterar as propriedades ou não deseja sempre usar a mesma propriedade de renomeação, a renomeação também pode ser feita criando um resolvedor personalizado.
Por exemplo, se você tem uma classe chamada
MyCustomObject
, que possui uma propriedade chamadaLongPropertyName
, pode usar um resolvedor personalizado como este…Em seguida, chame a serialização e forneça o resolver:
E o resultado será reduzido para {"Short": "prop value"} em vez de {"LongPropertyName": "prop value"}
Mais informações sobre resolvedores personalizados aqui
fonte
DefaultContractResolver
deve ser colocado no mesmo assembly em que o método JsonConvert.Serialize () é usado.Ainda existe outra maneira de fazer isso: usar uma NamingStrategy específica , que pode ser aplicada a uma classe ou propriedade decorando-as com
[JSonObject]
ou[JsonProperty]
.Existem estratégias de nomenclatura predefinidas, como
CamelCaseNamingStrategy
, mas você pode implementar suas próprias.A implementação de diferentes estratégias de nomenclatura pode ser encontrada aqui: https://github.com/JamesNK/Newtonsoft.Json/tree/master/Src/Newtonsoft.Json/Serialization
fonte