Ho bisogno di deserializzare alcuni oggetti JavaScript rappresentati in JSON in una classe C# appropriata. Date le belle caratteristiche delle proprietà automatiche, preferirei averle in queste classi piuttosto che avere solo dei campi. Sfortunatamente, il motore di serializzazione .NET (almeno, per impostazione predefinita) ignora completamente le proprietà automatiche in fase di deserializzazione e si preoccupa solo del campo di supporto, che ovviamente non è presente nell'oggetto JavaScript.Deserializzazione proprietà C# automatica di JSON
Dato che c'è no standard way to name backing fields e, a dire il vero, non voglio nemmeno disturbarmi con l'approccio "creiamo un oggetto JavaScript che sembra avere campi di backing C#" dato che suona un po 'sporco, l'unico modo in cui potrei serializza i campi JavaScript per le proprietà automatiche di C# se potessi forzare il motore di serializzazione in qualche modo a ignorare il campo di supporto e utilizzare direttamente la proprietà. Sfortunatamente, non riesco a capire come è fatto o se è possibile farlo. Qualsiasi idea sarebbe apprezzata.
EDIT: Ecco un esempio:
Javascript:
function Cat()
{
this.Name = "Whiskers";
this.Breed = "Tabby";
}
var cat = new Cat();
Questo è poi serializzato in "{Nome: 'Whiskers'}".
Il C# classe:
[Serializable()]
public class Cat
{
public string Name { get; set; }
public string Breed { get; set; }
}
E il codice deserializzazione, che non riesce:
new DataContractJsonSerializer(typeof(Cat)).ReadObject(inputStream);
ed è evidente dal l'eccezione che non riesce perché è alla ricerca per il campo di supporto.
EDIT2: Ecco l'eccezione, se questo aiuta (senza eccezioni interne):
System.Runtime.Serialization.SerializationException
"Il tipo di contratto di dati 'Test.Cat' non può essere deserializzato perché i membri di dati richiesti "
<Name>k__BackingField, <Breed>k__BackingField
" non sono stati trovati . "
Puoi pubblicare un esempio di cosa intendi? –
@John Saunders - diciamo che ho ottenuto un oggetto JavaScript chiamato "Cat" con un singolo campo chiamato "Nome" con il valore "Whiskers". Diciamo che questo è rappresentato in JSON. Voglio prendere questo JSON e serializzarlo su un'istanza della classe C# Cat (scritta da me) in modo che il processo di serializzazione compili la proprietà automatica "Nome" dell'istanza con "Whiskers". –
... ma il problema è che il serializzatore sta cercando il campo di supporto (es. " k_backingField" ma non necessariamente con questo nome ") e non" Nome ". –