自定义 jsonConverter的问题记录
来源:互联网 发布:windows彩蛋星球大战 编辑:程序博客网 时间:2024/06/10 08:59
using System;using System.Collections.Generic;using System.Linq;using System.Text;using Newtonsoft.Json;using Newtonsoft.Json.Linq;namespace ConsoleApplication1{ public class A { public string Title = "A Title"; [JsonConverter(typeof(ConsoleApplication1.Program.custConverter))] public List<answerBase> baseAnswerList = new List<answerBase>(); } public class answerA : answerBase { public List<int> value = new List<int>() { 1, 2, 3 }; } public class answerB : answerBase { public List<string> Correct = new List<string>() { "1111", "2222" }; public List<string> Incorrect = new List<string>() { "3333", "4444" }; } class Program { static void Main(string[] args) { JsonSerializerSettings jsonSerializerSettings = new JsonSerializerSettings(); jsonSerializerSettings.TypeNameHandling = TypeNameHandling.Objects; var test1 = new A(); test1.baseAnswerList.Add(new answerA()); var result = JsonConvert.SerializeObject(test1, jsonSerializerSettings); var test2 = new A(); test2.baseAnswerList.Add(new answerB()); var result2 = JsonConvert.SerializeObject(test2, jsonSerializerSettings); A a = (A)JsonConvert.DeserializeObject(result, jsonSerializerSettings); A a1 = (A)JsonConvert.DeserializeObject(result2, jsonSerializerSettings); List<A> testAList = new List<A>(); testAList.Add(test1); testAList.Add(test2); var resultList = JsonConvert.SerializeObject(testAList, jsonSerializerSettings); var deserializeResult = JsonConvert.DeserializeObject(resultList, jsonSerializerSettings); } public class custConverter : JsonConverter { public override bool CanConvert(Type objectType) { return true; } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { bool isError = false; try { List<int> retValTest1 = new List<int>(); retValTest1 = (List<int>)serializer.Deserialize(reader, typeof(List<int>)); var t1 = new List<answerBase>(); var a1 = new answerA(); a1.value = retValTest1; t1.Add(a1); return t1; } catch { isError = true; } if (isError) { try { var retVal = new List<answerB>(); retVal = (List<answerB>)serializer.Deserialize(reader, typeof(List<answerB>)); var t = new List<answerBase>(); foreach (var item in retVal) { t.Add(new answerB() { Correct = item.Correct.Distinct().ToList(), Incorrect = item.Incorrect.Distinct().ToList() }); } return t; } catch { isError = true; } } return null; } //public override bool CanRead //{ // get { return false; } //} public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { if (value == null) { writer.WriteNull(); return; } bool bValue = false; answerBase temp = new answerBase(); if (((List<answerBase>)value).Count() > 0) { temp = ((List<answerBase>)value).First(); bValue = temp is answerA; } if (bValue) { var tempA = temp as answerA; writer.WriteStartArray(); foreach (var item in tempA.value) { writer.WriteValue(item); } writer.WriteEndArray(); } else { JToken t = JToken.FromObject(value); t.WriteTo(writer); } } } }}
0 0
- 自定义 jsonConverter的问题记录
- newtonjson.net JsonConverter 的使用自定义序列化某个类(一)
- Qt继承QAbstractItemModel实现自定义结构的关键问题记录
- 记录一次自定义参数绑定错误问题的解决过程
- Android自定义键盘问题记录
- 自定义view的一些记录
- 自定义view的初级记录
- <记录模板学习的问题>标准库提供的swap与自定义的swap冲突
- 【记录】关于Eclipse的Maven项目导入自定义的其他Maven项目的问题
- 自定义ListView item包含checkbox实现单选记录自己开发是遇到的问题
- 记录一下Quick-Cocos2dx-Community lua绑定C++自定义类遇到的问题
- 自己的问题记录
- rman问题的记录
- 记录问题的点点滴滴
- springMVC的问题记录
- 记录粗心的问题
- UITableViewCell的自定义问题
- findbugs自定义的问题
- 插入排序
- 输入多组数据
- CSDN-Markdown编辑器之UML序列图
- 最近升级了友盟推送3.0.1,记录一下升级过程!
- 集合的定义
- 自定义 jsonConverter的问题记录
- DB2 循环 ,导入, Reorg
- cookie共享子域名
- JNI操作JAVA中操作字段和方法的效率
- Oracle 12c 新特性(2)_Approximate Count Distinct
- 关系模式的规范化
- lightoj 1012 水广搜。。。最近我脑子不大好了
- 主域名与子域名的区别
- ExtJS快速入门指南