我正在调用web服务,bool字段的返回数据是0或1但是我的模型我使用的是System.Bool
使用Json.Net可以将0/1转换为我的模型的bool吗?
目前我收到一个错误
Newtonsoft.Json.JsonSerializationException:将值"0"转换为类型'System.Boolean'时出错
任何帮助都是极好的!!
XML Schema Part 2指定定义为boolean的数据类型的实例可以具有以下合法文字{true,false,1,0}.例如,在反序列化时,以下XML将布尔属性"Emulate"设置为true.
<root>
<emulate>1</emulate>
</root>
Run Code Online (Sandbox Code Playgroud)
但是,当我将对象序列化回XML时,我得到的true不是数值.我的问题是,有没有办法可以控制XML中的布尔表示?
注意:我已在此Feed的底部提供了解决方案.
我有一个C#Win 8应用程序,我正在反序列化一些看起来像这样的json:
{
'Unit': [
{
'name':'House 123',
isAvailable:'no'
},
{
'name':'House 456',
isAvailable:'yes'
}]
}
Run Code Online (Sandbox Code Playgroud)
进入使用此接口的类:
public interface IUnit
{
string Name { get; }
bool isAvailable { get; }
}
Run Code Online (Sandbox Code Playgroud)
但是牛顿软件会抛出一个错误:
解析值时遇到意外的字符:n.Path'Unit [0] .isAvailable,第1行,第42位.
有没有办法根据生成的对象属性类型bool扩展Newtonsoft来解析yes/no或1/0?现在它只适用于真/假.
关于类的自定义转换器有几个帖子,但不是像bool这样的原始类型.
有什么建议?
如果我序列化一个 bool 值,我会得到这样的结果:
myboolValue: False
Run Code Online (Sandbox Code Playgroud)
我意识到这是由于 MicrosoftToString()对 bool的实现。
是否有我可以在 Newtonsoft 中更改以输出 false 的设置,例如:
myboolValue: false
Run Code Online (Sandbox Code Playgroud)
我可以使用 a 切换到字符串conditional ? "true" : "false",但这会在 JSON 中添加引号,例如:
myboolValue: "false"
Run Code Online (Sandbox Code Playgroud)
自定义序列化程序可以删除引号吗?
我想强制 Newtonsoft.JsonJsonConvert.SerializeObject始终将 bool 值威胁为字符串:"true"和"false"。
我知道这JsonConvert是一个静态类,我可能应该编写一个扩展方法,如下所示:
JsonConvert.DefaultSettings = () => new JsonSerializerSettings {}
Run Code Online (Sandbox Code Playgroud)
但说实话,我不知道该怎么做,也不知道如何将其实现到我的方法中:
public static string Serialize(Foo fooData)
{
return JsonConvert.SerializeObject(fooData);
}
Run Code Online (Sandbox Code Playgroud)
我将不胜感激任何建议。