注意:我已在此提要的底部提供了解决方案。
我有一个 C# Win 8 应用程序,其中我正在反序列化一些如下所示的 json:
{
'Unit': [
{
'name':'House 123',
isAvailable:'no'
},
{
'name':'House 456',
isAvailable:'yes'
}]
}
进入使用此接口的类:
public interface IUnit
{
string Name { get; }
bool isAvailable { get; }
}
但是 Newtonsoft 抛出一个错误:
解析值时遇到意外字符:n。小路
'Unit[0].isAvailable,第 1 行,位置 42。
有没有办法扩展 Newtonsoft 根据结果对象属性类型 bool 解析是/否或 1/0?目前它仅适用于真/假。
有几篇关于类的自定义转换器的文章,但没有关于像 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; }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)