c# – JSON反序列化 – 使用JSON.NET将数组索引映射到属性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – JSON反序列化 – 使用JSON.NET将数组索引映射到属性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1863字,纯文字阅读大概需要3分钟。
内容图文
我想将二维数组反序列化为.net对象的集合.原因是,我的用户可以更容易地在输入文件中使用数组语法.所以我只想将数组的索引映射到我的目标类型的特定属性.
例如.附:
[
["John", "Smith", "23"],
["Paula", "Martin", "54]
]
我会得到一个人的两个实例:
public class Person {
public string First {get;set;}
public string Last {get;set;}
public string Age {get;set;}
}
其中内部数组的索引0映射到First,索引1映射到Last,索引2映射到Age;
有没有办法扩展Json.NET,以便我可以在反序列化期间进行映射,以便隐藏实现细节?我一直在玩一个自定义的JsonConverter,但我没有找到关于如何使用它的很多信息.
编辑:
具体来说,我不确定JsonConverter是否正确使用,我无法弄清楚如何实现CanConvert以及如何使用传递给ReadJson方法的参数.
解决方法:
您可以使用JsonConverter执行此操作.用于此目的的简单转换器将是:
public class PersonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Person);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null)
return null;
var array = JArray.Load(reader);
var person = (existingValue as Person ?? new Person());
person.First = (string)array.ElementAtOrDefault(0);
person.Last = (string)array.ElementAtOrDefault(1);
person.Age = (string)array.ElementAtOrDefault(2);
return person;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var person = (Person)value;
serializer.Serialize(writer, new[] { person.First, person.Last, person.Age });
}
}
然后你可以将它应用到你的班级:
[JsonConverter(typeof(PersonConverter))]
public class Person
{
public string First { get; set; }
public string Last { get; set; }
public string Age { get; set; }
}
或者在设置中使用它:
var settings = new JsonSerializerSettings { Converters = new [] { new PersonConverter() } };
var list = JsonConvert.DeserializeObject<List<Person>>(json, settings);
内容总结
以上是互联网集市为您收集整理的c# – JSON反序列化 – 使用JSON.NET将数组索引映射到属性全部内容,希望文章能够帮你解决c# – JSON反序列化 – 使用JSON.NET将数组索引映射到属性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。