如何用 Newtonsoft.Json 正确解析属性为“接口集合”的JSON字符串
如何用 Newtonsoft.Json 正确解析属性为“接口集合<接口>”的字符串
我想要能够正确解析 CC 类,也就是其属性是 IList<I> ,都是接口类型的。
请注意,DD 类中可能还继续包含更深层次的集合接口。比如 DD还包含 D3 是 IList<IDD4> .
//CC occ = JsonConvert.DeserializeObject<CC>(s); //提示错误: Error setting value to 'C3' on 'ConsoleApplication1.CC'.
我想要能够正确解析 CC 类,也就是其属性是 IList<I> ,都是接口类型的。
请注意,DD 类中可能还继续包含更深层次的集合接口。比如 DD还包含 D3 是 IList<IDD4> .
//CC occ = JsonConvert.DeserializeObject<CC>(s); //提示错误: Error setting value to 'C3' on 'ConsoleApplication1.CC'.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using Newtonsoft.Json.Converters;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string s = "{\"B\":\"sdfasdf\",\"C3\":[{\"a\":\"sdfasdf\"},{\"a\":\"adsfasdf33333333\"}]}";
//提问,如何用 Newtonsoft.Json 正确解析属性为“接口集合<接口>”的字符串
//我想要能够正确解析 CC 类,也就是其属性是 IList<I> ,都是接口类型的。
//请注意,DD 类中可能还继续包含更深层次的集合接口。比如 DD还包含 D3 是 IList<IDD4> .
//CC occ = JsonConvert.DeserializeObject<CC>(s); //提示错误: Error setting value to 'C3' on 'ConsoleApplication1.CC'.
CC2 occ2 = JsonConvert.DeserializeObject<CC2>(s); //能够正确解析
Debug.Print(((DD)occ2.C3[0]).a);
//CC3 occ3 = JsonConvert.DeserializeObject<CC3>(s); //提示错误: Error setting value to 'C3' on 'ConsoleApplication1.CC'.
//Debug.Print(((DD)occ3.C3[0]).a);
}
}
/// <summary>
/// 请注意 CC CC2 CC3 只是在 C3 的定义上有区别。 CC 是我要最终实现的类。
/// </summary>
public class CC2
{
public string B;
[JsonConverter(typeof(ConcreteTypeConverter<List<DD>>))]
public IList<DD> C3;
}
public class CC3
{
public string B;
[JsonConverter(typeof(ConcreteTypeConverter<List<DD>>))]
public List<IDD> C3;
}
public class CC
{
public string B;
[JsonConverter(typeof(ConcreteTypeConverter<List<DD>>))]
public IList<IDD> C3;
}
public interface IDD
{
string a { get; set; }
}
public class DD : IDD
{
public string a { get; set; }
}
public class ConcreteTypeConverter<T> : JsonConverter
{
public override bool CanConvert(Type objectType)
{
//assume we can convert to anything for now
return true;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
//explicitly specify the concrete type we want to create
return serializer.Deserialize<T>(reader); //实现不了
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
//use the default serialization - it works fine
serializer.Serialize(writer, value);
}
}
}
...全文
相关推荐
c#利用Newtonsoft.Json解析json(带数组)
c#解析带数组的json,采用Newtonsoft.Json。资源是VS2013创建的工程。适合新手使用,老鸟就自己钻研解析哦~
Unity版Newtonsoft.Json
Newtonsoft.Json,使用教程:https://skode.blog.csdn.net/article/details/93474066
C#后台接受前台JSON字符串装换成字典集合处理
本文介绍C#利用Newtonsoft接收前端的JSON字符串,并解析反序列化成字典集合,对其进行处理。
用Newtonsoft将json串转为对象的方法(详解)
首先,将json串转为一个JObject对象: JObject jo = (JObject)JsonConvert.DeserializeObject(CurrentSelectedItemReq); 这个JObject是一个“值对”类型,比如说我们的json串是这样: { rows:[ [ {NumIid:001}, {PicUrl:xxx.png}, {Title:xxxxx}, {Price:xxx}, {OuterId:xxxx} ], [ {NumIid:002}, {
Newtonsoft.Json各版本的dll
Newtonsoft.Json各.NET freamework版本的dll 包括x86 的dll也有64位的dll 1.0 到4.5


