C# 确定是否为数组或对象
我创建了一个类来解析JSON响应。我遇到的问题是,一个项目有时是数组,另一个是对象。我曾试图想出一个解决办法,但最终总是给我带来一些其他问题 我希望有一些if或try语句,让我确定创建了什么 伪代码C# 确定是否为数组或对象,c#,.net,json,web-services,rest,C#,.net,Json,Web Services,Rest,我创建了一个类来解析JSON响应。我遇到的问题是,一个项目有时是数组,另一个是对象。我曾试图想出一个解决办法,但最终总是给我带来一些其他问题 我希望有一些if或try语句,让我确定创建了什么 伪代码 [DataContract] public class Devices { if(isArray){ [DataMember(Name = "device")] public Device [] devicesArray
[DataContract]
public class Devices
{
if(isArray){
[DataMember(Name = "device")]
public Device [] devicesArray { get; set; }}
else{
[DataMember(Name = "device")]
public Device devicesObject { get; set; }}
}
使用丹的代码,我想出了以下解决方案,但现在当我尝试使用它时,我有一个铸造问题。
“无法将'System.object'类型的对象强制转换为'MItoJSON.Device'类型”
将目标属性声明为对象。然后,可以创建一个帮助器属性,用于处理目标是数组还是单个对象:
private object target;
public object Target
{
get { return this.target; }
set
{
this.target = value;
var array = this.target as Array;
this.TargetValues = array ?? new[] { this.target };
}
}
public Array TargetValues { get; private set; }
只需将其建模为一个数组-对于单个项目,它将是一个包含一个项目的数组。这是我最初所做的,但它无法工作。如果只有一项,则数组的长度始终为零。如果我将它创建为一个对象,那么它将适用于单个项目。我严重怀疑,如果传递一个项目并使用一个项目创建数组,那么数组的长度是否为零。
private object target;
public object Target
{
get { return this.target; }
set
{
this.target = value;
var array = this.target as Array;
this.TargetValues = array ?? new[] { this.target };
}
}
public Array TargetValues { get; private set; }