C# 反序列化变量对象的JSON数组

C# 反序列化变量对象的JSON数组,c#,deserialization,json-deserialization,C#,Deserialization,Json Deserialization,因此,首先,我不能使用“dynamic”,因为这最终是通过一个不支持动态语言运行时(DLR)的IL2CPP transpiler实现的 也就是说,我正在编写一个供其他开发人员使用的客户机,它使用一个非常通用的API,允许定义/更新其值可以是任何有效JSON类型(字符串、数字、数组、嵌套对象)的属性,并列出所有存在的属性及其值。可以想象,可以在应用程序运行时修改以下数组元素。我试图找出最符合人体工程学的方法来反序列化C#中的以下内容: 然而,需要明确的是,另一个约束条件是,这些并不是“值”的唯一两

因此,首先,我不能使用“dynamic”,因为这最终是通过一个不支持动态语言运行时(DLR)的IL2CPP transpiler实现的

也就是说,我正在编写一个供其他开发人员使用的客户机,它使用一个非常通用的API,允许定义/更新其值可以是任何有效JSON类型(字符串、数字、数组、嵌套对象)的属性,并列出所有存在的属性及其值。可以想象,可以在应用程序运行时修改以下数组元素。我试图找出最符合人体工程学的方法来反序列化C#中的以下内容:

然而,需要明确的是,另一个约束条件是,这些并不是“值”的唯一两种值类型。此数组是请求“通过API创建的所有不同类型属性及其值”的结果。devs的下一个调用可能是使用

value: 0

这将向上述数组中添加第三个元素,其值为数字。

反序列化数据的预期用途是什么?在编译时不知道它的结构的情况下,你知道如何处理它吗?已经有一个流行的库用于此:还有一个:嗯,.NET Core肯定还不支持PS4,而且可能在很长一段时间内都不支持,这是真的。考虑到这些限制,动态生成用于动态编译的类型化类也不容易——但您可能也不需要这样做。嵌套字典几乎是唯一的出路;使用任何将在您的平台上运行的JSON解析库,并准备大量恼人的代码,如
开关(Type.GetTypeCode(value.GetType())
。(或者,您可以使用提供有差别的联合的库来稍微简化这一过程。)哦,或者(我是dum dum)如果您的API本质上根本不处理值本身,而只是创造性地将它们返回给消费者,那么您至少可以将所有原始值保留为原始
string
值。无论是
0
“hello world”
还是
[“value1”,“value2”]
,您都不必担心;您只需要跟踪外部结构并区分字符串和字典。(解析仍然需要一个合适的库;不要尝试在那里使用快捷方式,因为这很容易出错。但是解析之后,您可以保留序列化的表单。)反序列化数据的预期用途是什么?在编译时不知道它的结构的情况下,你知道如何处理它吗?已经有一个流行的库用于此:还有一个:嗯,.NET Core肯定还不支持PS4,而且可能在很长一段时间内都不支持,这是真的。考虑到这些限制,动态生成用于动态编译的类型化类也不容易——但您可能也不需要这样做。嵌套字典几乎是唯一的出路;使用任何将在您的平台上运行的JSON解析库,并准备大量恼人的代码,如
开关(Type.GetTypeCode(value.GetType())
。(或者,您可以使用提供有差别的联合的库来稍微简化这一过程。)哦,或者(我是dum dum)如果您的API本质上根本不处理值本身,而只是创造性地将它们返回给消费者,那么您至少可以将所有原始值保留为原始
string
值。无论是
0
“hello world”
还是
[“value1”,“value2”]
,您都不必担心;您只需要跟踪外部结构并区分字符串和字典。(解析仍然需要一个合适的库;不要尝试在那里使用快捷方式,因为这很容易出错。但是解析之后,您可以保留序列化的表单。)
value: 0