注意:我已在此提要底部提供了解决方案。
我有一个 C# Win 8 应用程序,我正在反序列化一些如下所示的 json:
{
'Unit': [
{
'name':'House 123',
isAvailable:'no'
},
{
'name':'House 456',
isAvailable:'yes'
}]
}
进入一个使用这个接口(interface)的类:
public interface IUnit
{
string Name { get; }
bool isAvailable { get; }
}
但是 Newtonsoft 抛出一个错误:
Unexpected character encountered while parsing value: n. Path 'Unit[0].isAvailable, line 1, position 42.
有没有办法扩展 Newtonsoft 以根据结果对象属性类型 bool 解析是/否或 1/0?现在它只适用于 true/false。
有几篇关于类的自定义转换器的帖子,但没有像 bool 这样的原始类型。
有什么建议吗?
最佳答案
public class MyBooleanConverter : JsonConverter
{
public override bool CanWrite { get { return false; } }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var value = reader.Value;
if (value == null || String.IsNullOrWhiteSpace(value.ToString()))
{
return false;
}
if ("yes".Equals(value, StringComparison.OrdinalIgnoreCase))
{
return true;
}
return false;
}
public override bool CanConvert(Type objectType)
{
if (objectType == typeof(String) || objectType == typeof(Boolean))
{
return true;
}
return false;
}
}
public interface IUnit
{
string Name { get; }
[JsonConverter(typeof(MyBooleanConverter))]
bool isAvailable { get; }
}
关于c# - 如何让 newtonsoft 将 yes 和 no 反序列化为 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14524669/