在此响应中,有时会将sizeKey和sizeName属性作为字符串返回。但是有时两个属性都在数组内返回,如下所示
我正在使用以下代码将其转换为对象
var assets = jObject["assets"].Children().ToList();
foreach (var item in assets)
{
decorationAssets.Add(item.ToObject<AEDecorationAssets>());
}
我的AEDecorationAssets类如下。
public class AEDecorationAssets
{
public string Id { get; set; }
public string Url { get; set; }
public string[] Colors { get; set; }
public string FontKey { get; set; }
public string SizeKey { get; set; }
public string ViewKey { get; set; }
public string FontName { get; set; }
public int Rotation { get; set; }
public string SizeName { get; set; }
public string TextValue { get; set; }
public string EntityType { get; set; }
public string LocationCode { get; set; }
public string LocationName { get; set; }
public string TextEffectKey { get; set; }
public string TextEffectName { get; set; }
public string DecorationMethod { get; set; }
public string NumDecorationColors { get; set; }
}
当“ sizeKey”是一个数组时,以上代码给出了一个错误。我该如何解决这个问题?我们可以使用任何JSON属性来解决它吗?
答案 0 :(得分:3)
一种方法是通过使SizeKey
键入object
(即public object SizeKey { get; set; }
),然后打开/设置item.ToObject<AEDecorationAssets>().SizeKey.GetType()
来找出来处理它(例如,如果String
这样做,如果JArray
这样做),等等。
答案 1 :(得分:0)
如果JSON类型有时是array
,有时是string
,则不能真正将其简单地映射到.NET类型,因为没有一种支持这种行为。
因此,首先需要一个可以存储此数据的数据类型,例如string[]
或List<string>
。
JsonConvert
可能会自动解决此问题,但是否则,您需要编写自定义的ContractResolver
或JsonConverter
。在这里,您可以检测source属性是字符串还是数组。如果它是array
,则可以使用默认的反序列化。如果它是string
,则需要将其转换为具有单个值的数组。
答案 2 :(得分:0)
仅获取要为其创建c#对象的json结果,然后可以从https://jsonlint.com/验证json响应,然后可以通过http://json2csharp.com创建想要的任何类型的json响应的c#对象。在获取json响应的c#对象之后,您只需要将json响应反序列化为已创建的c#对象即可。这将返回您的预期结果。