我不太确定您所说的“我想将 JSON 反序列化为 T,其中 T 被递归定义为”是什么意思,我的假设是您希望能够序列化和反序列化上面列出的任何类型和任何组合。
我的经验表明,System.Runtime.Serialization.Json
具体可用的标准 DotNet 库DataContractJsonSerializer
对于您描述的工作来说已经足够了,并且将成功地处理您提到的所有类型(没有元数据描述),而不是一种;T 的装箱对象。但是我的假设是,没有库能够在不提供元数据的情况下处理 T 的装箱对象(它怎么能?它对您的对象一无所知)
这是我用来在我的应用程序中提供序列化的一些代码
public class JSONSerializer<T>
{
public static string Serialize(T obj)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
using (MemoryStream stream = new MemoryStream()) {
serializer.WriteObject(stream, obj);
return Encoding.Default.GetString(stream.ToArray());
}
}
public static T Deserialize(string json)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
using (MemoryStream stream = new MemoryStream(Encoding.Default.GetBytes(json))) {
return (T)serializer.ReadObject(stream);
}
}
}
PS:另请注意,DataContractSerializer 执行“纯”序列化和反序列化而不使用任何代理类型对象(至少不在输出或输入中,可能在内部某处)。