Alcuni tipi personalizzati che implementano IEnumerable non hanno necessariamente raccolte di backup. Potrebbero essere generati dinamicamente, ad esempio usando "yield" o LINQ. Ecco un esempio:Come si ignora la serializzazione di array JavaScript predefinita per i tipi IEnumerable in Json.Net?
public class SOJsonExample
{
public class MyCustomEnumerable : IEnumerable<KeyValuePair<int,float>>
{
public List<int> Keys { get; set; }
public List<float> Values { get; set; }
public MyCustomEnumerable()
{
Keys = new List<int> { 1, 2, 3 };
Values = new List<float> { 0.1f, 0.2f, 0.3f };
}
public IEnumerator<KeyValuePair<int, float>> GetEnumerator()
{
var kvps =
from key in Keys
from value in Values
select new KeyValuePair<int, float>(key, value);
return kvps.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
}
ho scoperto che la serializzazione predefinita Json.NET è di enumerare ogni valore e memorizzare i valori in un array JavaScript (che io non voglio). Il deserializzatore predefinito non riuscirà quindi a deserializzare la raccolta in quanto non può essere popolata. In questi casi, preferirei che Json.NET salti la serializzazione predefinita degli array JavaScript e memorizzi solo i membri della classe.
Tutto quello che voglio sono le mie chiavi e valori - c'è qualche modo di scelta rapida per fare questo, o devo implementare il mio serializzatore personalizzato?
Controllato this e this, nessuno dei quali è esattamente la mia domanda. Scansionato anche the documentation, ma non ho trovato quello che stavo cercando (forse ho cercato nel posto sbagliato).
(Modifica # 1 - una maggiore chiarezza)
(Edit # 2 - ha risposto alla mia domanda ... vedi sotto)
Questa pagina le descrizioni per 'JsonObject' e gli altri attributi. http://www.newtonsoft.com/json/help/html/SerializationAttributes.htm – kmc059000