¿Cómo tratan las clases de C # los signos de dólar en JSON?

Recibo un feed JSON de API de datos de Google y muchos de los nombres de propiedades comienzan con un carácter $ (signo de dólar).

Mi problema es que no puedo crear una clase C # con un nombre de variable que comience con un signo de dólar, el idioma no lo permite. Estoy usando JSON.NET de Newtonsoft para convertir JSON a objetos C #. ¿Cómo puedo solucionar este problema?

preguntado el 09 de enero de 11 a las 09:01

3 Respuestas

Podrías intentar usar el [JsonProperty] atributo para especificar el nombre:

[JsonProperty(PropertyName = "$someName")]
public string SomeName { get; set; }

Respondido el 09 de enero de 11 a las 13:01

firas489 estaba en el camino correcto que $ indica metadatos, no un campo de datos real. Sin embargo, la solución es en realidad hacer esto:

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.MetadataPropertyHandling = MetadataPropertyHandling.Ignore;            

Configure el manejo de metadatos para ignorar, y luego puede serializar / deserializar la propiedad usando el atributo PropertyName:

[JsonProperty("$id")]
public string Id { get; set; }

Respondido el 09 de Septiembre de 15 a las 18:09

Los elementos con el signo de dólar ($) suelen ser metadatos y NO campos. Cuando JSON.NET serializa un objeto y le dice que maneje los tipos de objeto, insertará $ elementos que denotan metadatos para una correcta deserialización más adelante.

Si desea tratar los $ elementos como metadatos, use JsonSerializerSettings. Por ejemplo:

Dim jsonSettings As New Newtonsoft.Json.JsonSerializerSettings With {.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.All}
Dim jsonOut As String = Newtonsoft.Json.JsonConvert.SerializeObject(objects, jsonSettings)

TypeNameHandling = Newtonsoft.Json.TypeNameHandling.All le dice a JSON que maneje los tipos de datos mientras confía en $ para obtener información.

Espero que ayude..

respondido 19 nov., 14:18

Entonces, ¿tengo en esencia lo inverso de este problema? Estoy escribiendo una herramienta para crear un esquema json y necesito generar $ esquema, $ id, #ref y similares. Estoy luchando con una buena manera de abordar eso, la idea actual es tener potencialmente algo que ejecute una publicación que reemplace 'id' con '$ id' pero que se sienta torpe. Feliz de colocar esto en una nueva pregunta si es necesario. - Jeff Patton

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.