为了反序列化 json 对象,我必须定义一个父类,其中包含子类的一个对象或对象数组。如果检索到对象,则它必须是一个对象;如果从 json 检索数组,则它必须是对象数组。
JSON 数组对象
{"y":{"x":[{"data":28}, {"data":56}, {"data":89}]}}
JSON 对象
{"y":{"x":{"data":28}}}
y 一次接收 x,另一次接收 x[]。没有这样的条件来确定 y 是否会接收数组或对象。
因此,为了确定我是否收到了数组,我正在检查 IsArray() 条件。
I tried
class Y
{
public X x { get { return System.IsArray() ? new X() : new x[] }; set; }
}
class X
{
public int data { get; set; }
}
- 它不起作用。
- System.IsArray() 未被识别?
首先,一个数组is一个东西。这是一件好事,因为它允许这些函数工作(都假设using System;
):
bool IsArray(object o) { return o is Array; }
bool IsArray(object o) { return o.GetType().IsArray; }
其次,如果您想要一个属性,其类型可以是X
or X[]
,属性的类型需要是object
:
class Y
{
private object _x;
public object x {
get { return _x; }
set
{
if (value.GetType != typeof(X) && value.GetType != typeof(X[]))
throw new ArgumentException("value");
_x = value;
}
}
}
这在某种程度上忽略了静态类型的优势,因为您正在使用object
并在运行时检查类型。将属性定义为数组确实要简单得多,即使对于只有一个值的情况也是如此。在这种情况下,它将是一个长度为 1 的数组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)