Newtonsoft.JSON 序列化生成具有对象类型的唯一字符串



我有一个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()});

相关内容

  • 没有找到相关文章

最新更新