2016-04-15 11 views
1

Ich habe ein Objekt der Klasse ProcessStartInfoJSON.NET serialisiert Process

ProcessStartInfo psi = new ProcessStartInfo() 
{ 
    FileName = "path", 
    Arguments = "args", 
    UseShellExecute = false, 
    RedirectStandardError = true, 
    CreateNoWindow = true, 
    Verb = "runas" 
}; 

Und für die Protokollierung Zweck will ich es JSON serialisiert. Mein Code:

string json = JsonConvert.SerializeObject(psi); 

json enthält:

"System.Diagnostics.ProcessStartInfo"

Wie Eigenschaften intead serialisiert Namen eingeben?

+2

Es ist wegen der '[TypeConverter (typeof (ExpandableObjectConverter))]' Attribut auf 'ProcessStartInfo'. Siehe zum Beispiel [Newtonsoft json Serializer gibt leeres Objekt zurück] (http://stackoverflow.com/questions/11044639/newtonsoft-json-serializer-returns-empty-object). – CodeCaster

+0

@CodeCaster Danke. Ich brauche es an einem Ort. Own ContractResolver ist zu viel Arbeit ;-) Gibt es dafür keinen Switch in JSON.NET? – BWA

Antwort

3

Wie @CodeCaster im Kommentar angegeben ist, ist das Problem mit [TypeConverter(typeof(ExpandableObjectConverter))], müssen Sie neue JsonObjectContract für das Attribut "ExpandableObjectConverter" zu Typ zugewiesen werden.

Neuer Vertrag Resolver kann für die attibute ‚Expandable‘ mit Art erstellt werden:

public class SerializableExpandableContractResolver : DefaultContractResolver 
    { 
     protected override JsonContract CreateContract(Type objectType) 
     { 
      if (TypeDescriptor.GetAttributes(objectType).Contains(new TypeConverterAttribute(typeof(ExpandableObjectConverter)))) 
      { 
       return CreateObjectContract(objectType); 
      } 
      return base.CreateContract(objectType); 
     } 
    } 

Jetzt können Sie über Vertrag Resolver verwenden, während in folgenden Weise Serialisierung:

string json = JsonConvert.SerializeObject(psi, 
       new JsonSerializerSettings() {ContractResolver = new SerializableExpandableContractResolver()}); 
+0

Danke, das funktioniert. Basierend auf @CodeCaster Kommentar schrieb ich etwas ähnliches :-) – BWA

+0

Gut zu wissen, dass !!! –