Necesito deserializar algún objeto JavaScript representado en JSON en una clase C# apropiada. Dadas las buenas características de las propiedades automáticas, preferiría tenerlas en estas clases en lugar de solo tener campos. Desafortunadamente, el motor de serialización .NET (al menos, por defecto) ignora por completo las propiedades automáticas en la deserialización y solo se preocupa por el campo de respaldo, que obviamente no está presente en el objeto JavaScript.Deserialización de propiedad automática de C# de JSON
Dado que hay no standard way to name backing fields y para ser honesto, ni siquiera me quiero molestar con el "vamos a crear un objeto JavaScript que se ve como si tuviera campos de respaldo C#", ya que suena un poco sucio, la única manera que pude serialice los campos de JavaScript en C-auto-properties si pudiera forzar al motor de serialización a ignorar de alguna manera el campo de respaldo y usar la propiedad directamente. Lamentablemente, no puedo entender cómo se hace esto o si esto se puede hacer en absoluto. Cualquier idea sería apreciada.
EDITAR: He aquí un ejemplo:
Javascript:
function Cat()
{
this.Name = "Whiskers";
this.Breed = "Tabby";
}
var cat = new Cat();
Ésta es entonces serializado a "{Nombre: 'Bigotes'}".
La clase C#:
[Serializable()]
public class Cat
{
public string Name { get; set; }
public string Breed { get; set; }
}
Y el código de deserialización, que falla:
new DataContractJsonSerializer(typeof(Cat)).ReadObject(inputStream);
Y es evidente a partir de la excepción de que se produce un error porque está buscando para el campo respaldo.
Edit2: Aquí está la excepción, si eso ayuda (sin excepciones internas):
System.Runtime.Serialization.SerializationException
"El tipo de contrato de datos 'Test.Cat' no puede se deserializaron porque requirieron datos miembros '
<Name>k__BackingField, <Breed>k__BackingField
' no eran encontrado. "
¿Puedes publicar un ejemplo de lo que quieres decir? –
@John Saunders - digamos que obtuve un objeto JavaScript llamado "Cat" con un solo campo llamado "Nombre" con el valor "Bigotes". Digamos que esto está representado en JSON. Quiero tomar este JSON y serializarlo en una instancia de la clase C# Cat (escrita por mí) para que el proceso de serialización llene la propiedad automática "Nombre" de la instancia con "Bigotes". –
... pero el problema es que el serializador está buscando el campo de respaldo (por ejemplo, " k_backingField" pero no necesariamente con este nombre ") y no" Nombre ". –