我有一个ProcessStartInfo
类的对象
ProcessStartInfo psi = new ProcessStartInfo()
{
FileName = "path",
Arguments = "args",
UseShellExecute = false,
RedirectStandardError = true,
CreateNoWindow = true,
Verb = "runas"
};
出于日志记录的目的,我希望将其序列化为JSON。我的代码:
string json = JsonConvert.SerializeObject(psi);
json
包含:
"System.Diagnostics.ProcessStartInfo"
如何序列化属性和类型名称?
由于@CodeCaster在注释中指定,问题在于[TypeConverter(typeof(ExpandableObjectConverter))]
,您需要为分配给类型的"ExpandableObjectConverter
"属性创建新的JsonObjectContract
。
可以为具有"ExpandableObjectConverter"属性的类型创建新的合同解析程序:
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);
}
}
现在,您可以在以下方式序列化时使用上面的契约解析器:
string json = JsonConvert.SerializeObject(psi,
new JsonSerializerSettings() {ContractResolver = new SerializableExpandableContractResolver()});