【发布时间】:2016-06-23 04:50:55
【问题描述】:
我有一个有很多“可选布尔值”的类——布尔值可能是真、假或空。在 .NET 中表示这一点的最常见方法是使用 bool?,但它至少占用内存中的 2 个字节(参见 this question),所以我编写了自己的 OptionalBool 结构,它只占用 1 个字节和可以隐式转换为bool?。
我的问题是,我有这样的课程:
public class PartnerLoginOptions
{
public string Username { get; set; }
public string Password { get; set; }
public string DeviceModel { get; set; }
public string Version { get; set; }
public OptionalBool IncludeUrls { get; set; }
public OptionalBool ReturnDeviceType { get; set; }
public OptionalBool ReturnUpdatePromptVersions { get; set; }
}
如何让 Json.NET 在序列化时执行从 OptionalBool 到 bool? 的隐式转换?例如,如果 IncludeUrls 为 default(OptionalBool)(即“null”),ReturnDeviceType 为真,ReturnUpdatePromptVersions 为假,那么输出的 JSON 将类似于
{
"includeUrls": null,
"returnDeviceType": true,
"returnUpdatePromptVersions": false
}
在给定PartnerLoginOptions 对象的情况下,我该怎么做?我到目前为止的代码是
var body = JsonConvert.SerializeObject(options, new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
编辑:如果有用,here 是OptionalBool 的源代码。
【问题讨论】:
-
您是否看过创建自定义 json 转换器?
标签: c# .net json serialization json.net