繁体   English   中英

Newtonsoft.JSON序列化产生一个带有对象类型的唯一字符串

[英]Newtonsoft.JSON serialization results in a sole string with the object's type

我有一个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”

如何序列化属性intead类型名称?

由于@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()});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM