J'ai besoin de désérialiser certains objets JavaScript représentés dans JSON dans une classe C# appropriée. Étant donné les caractéristiques intéressantes des propriétés automatiques, je préférerais les avoir dans ces classes plutôt que d'avoir seulement des champs. Malheureusement, le moteur de sérialisation .NET (au moins, par défaut) ignore totalement les propriétés automatiques de désérialisation et se soucie uniquement du champ de sauvegarde, qui n'est évidemment pas présent dans l'objet JavaScript. Étant donné qu'il y a no standard way to name backing fields et pour être honnête, je ne veux même pas m'embêter avec l'approche «créons un objet JavaScript qui ressemble à des champs d'accompagnement C#», car cela semble un peu sale, la seule façon dont je pouvais sérialiser les champs JavaScript en auto-propriétés C# si je pouvais forcer le moteur de sérialisation à ignorer le champ de sauvegarde et à utiliser la propriété directement. Malheureusement, je ne peux pas comprendre comment cela est fait ou si cela peut être fait du tout. Toute idée serait appréciée.C# désérialisation automatique des propriétés de JSON
EDIT: Voici un exemple:
Javascript:
function Cat()
{
this.Name = "Whiskers";
this.Breed = "Tabby";
}
var cat = new Cat();
C'est alors sérialisé "{Nom: 'Moustaches'}".
La classe C#:
[Serializable()]
public class Cat
{
public string Name { get; set; }
public string Breed { get; set; }
}
Et le code désérialisation, qui échoue:
new DataContractJsonSerializer(typeof(Cat)).ReadObject(inputStream);
Et il ressort de l'exception qu'il échoue parce qu'il est à la recherche du champ de support.
EDIT2: Voici l'exception, si cela aide (sans exception): intérieure
System.Runtime.Serialization.SerializationException
« Le type de contrat de données 'Test.Cat' ne peut pas être désérialisé car les membres de données requis '
<Name>k__BackingField, <Breed>k__BackingField
' n'ont pas été trouvés . "
Pouvez-vous poster un exemple de ce que vous voulez dire? –
@ John Saunders - Disons que j'ai un objet JavaScript appelé "Cat" avec un seul champ appelé "Nom" avec la valeur "Whiskers". Disons que ceci est représenté dans JSON. Je veux saisir ce JSON et le sérialiser vers une instance de classe C# Cat (écrite par moi) afin que le processus de sérialisation remplisse la propriété automatique "Nom" de l'instance avec "Whiskers". –
... mais le problème est que le sérialiseur cherche le champ de sauvegarde (par exemple " k_backingField" mais pas nécessairement avec ce nom ") et non" Nom " –