[英]Convert JSON string to object C#
在此响应中,有时将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属性来解决它吗?
一种实现方法是,使您的SizeKey
类型成为一个object
(例如, public object SizeKey { get; set; }
),然后可以在item.ToObject<AEDecorationAssets>().SizeKey.GetType()
进行切换/大小写操作item.ToObject<AEDecorationAssets>().SizeKey.GetType()
指出如何处理(例如,如果String
做到这一点,如果JArray
做到这一点),等等。
如果JSON类型有时是一个array
,有时是一个string
,则不能真正将其简单地映射到.NET类型,因为没有一种支持此行为。
因此,首先需要一个可以存储此数据的数据类型,例如string[]
或List<string>
。
可能JsonConvert
将自动解决此问题,但否则,您需要编写自定义ContractResolver
或JsonConverter
。 在这里,您可以检测source属性是字符串还是数组。 如果是array
,则可以使用默认的反序列化。 如果是string
,则需要将其转换为具有单个值的数组。
只需获取要为其创建c#对象的json结果,然后可以从https://jsonlint.com/验证 json响应,然后就可以通过http:// json2csharp创建想要的任何类型的json响应的c#对象。 com 。 在获取json响应的c#对象之后,您只需要将json响应反序列化为已创建的c#对象即可。 这将返回您的预期结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.