2013-08-08 21 views
5

Buona giornata!Serializzazione Json .NET - modifica il valore della proprietà

Attualmente sto usando il Newtonsoft JSON Serializzatore attraverso il seguente codice:

 private string serializeAndIgnoreEmail(UserMembership obj) 
     { 
      var json = JsonConvert.SerializeObject(obj, Formatting.Indented, 
       new JsonSerializerSettings() { ContractResolver = new DocumentIdContractResolver() }); 
      return json; 
     } 
     private class DocumentIdContractResolver : CamelCasePropertyNamesContractResolver 
     { 
      protected override List<MemberInfo> GetSerializableMembers(Type objectType) 
      { 
       return base.GetSerializableMembers(objectType).Where(o => o.Name != "Email").ToList(); 
      } 
     } 

Ogni volta che ho bisogno di serializzare un oggetto chiamo il metodo 'serializeAndIgnoreEmail'. Ora voglio sostituire il contenuto di ogni proprietà con la sua versione crittografata e non so dove farlo.

La mia ipotesi sarebbe quella di sovrascrivere un metodo nel "DocumentIdContractResolver", ma ci sono così tanti CreateBlahBlahBlah, che trovo molto difficile lavorare con loro.

È questo l'approccio giusto, per continuare a modificare ContractResolver o devo provare qualcos'altro?

Grazie!

risposta

7

Chiamare SerializeObject fa due cose: crea un albero di token JSON basato sull'oggetto specificato e serializza quello in una stringa che contiene il JSON.

La soluzione migliore è eseguire i due passaggi separatamente: prima chiedere a JSON.NET di fornire l'albero dei token JSON, quindi modificare i valori e serializzarli su JSON.

Dalla cima della mia testa:

namespace JsonEncryptionTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var obj = new 
       { 
        To = "Some name", 
        Subject = "A Subject", 
        Content = "A content" 
       }; 

      var jsonObject = JObject.FromObject(obj); 

      // modify the values. Just doing something here to amuse you. 
      var property = jsonObject.Property("Content"); 
      var value = (string) property.Value; 
      property.Value = value.ToLower(); 

      var json = jsonObject.ToString(); 

      Console.WriteLine(json); 
     } 
    } 
} 
1

non ho fatto la stessa identica cosa. Ma nel mio caso per un progetto di API Web, avevo bisogno di serializzare i nomi delle stringhe dei valori enum invece dei loro valori numerici. Ho fatto un po 'di ricerche e ho capito che i convertitori di formattatori Json sono vuoti di default. Così ho aggiunto:

config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter()); 

Nel tuo caso, è necessario scrivere un costume JsonConverter e aggiungerlo alla lista dei convertitori. È possibile trovare un esempio simile qui:

Custom Json Converter

Problemi correlati