繁体   English   中英

将JSON字符串转换为对象C#

[英]Convert JSON string to object C#

我有JSON字符串结果,如下所示。 在此处输入图片说明

在此响应中,有时将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将自动解决此问题,但否则,您需要编写自定义ContractResolverJsonConverter 在这里,您可以检测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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM