将Json字符串转换为其他类型

1l5u6lss  于 9个月前  发布在  其他
关注(0)|答案(3)|浏览(121)

我有一个这样的物体

"maqVeicEquip": 
{
    "item": 
    {
        "tipoMaq": "03",
        "marca": "DAF",
        "idadeMediaFrota": "1",
        "quantidade": "2",
        "indOnus": "true",
        "valorMedio": "0.00",
        "outrasInformacoes": "XF105 FTT510 - BCO PACCAR",
        "percPropriedade": "100.00"
    }
}

字符串
我不能将它格式化,因为itemList<>。你们知道有什么方法可以将item强制格式化为List<Item>吗?
这是我的班级

public class MaqVeicEquip
{
    public List<Item> item { get; set; }
    
    public class Item
    {
        public string tipoMaq { get; set; }
        public string marca { get; set; }
        public string idadeMediaFrota { get; set; }
        public string quantidade { get; set; }
        public string indOnus { get; set; }
        public string valorMedio { get; set; }
        public string outrasInformacoes { get; set; }
        public string percPropriedade { get; set; }
    }
}

ejk8hzay

ejk8hzay1#

如果您使用Newtonsoft.Json进行序列化,则可以
a)定义一个自定义转换器,如下所示(示例改编自this post by Brian Rogers):

public class SingleOrArrayConverter<T> : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return (objectType == typeof(List<T>));
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        JToken token = JToken.Load(reader);
        if (token.Type == JTokenType.Array)
        {
            return token.ToObject<List<T>>();
        }
        return new List<T> { token.ToObject<T>() };
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        List<T> list = (List<T>)value;
        if (list.Count == 1)
        {
            serializer.Serialize(writer, list[0]);
        }
        else
        {
            serializer.Serialize(writer, list);
        }
    }
}

字符串
B)将自定义转换器应用于类的属性:

public class MaqVeicEquip
{
    [JsonConverter(typeof(SingleOrArrayConverter<Item>))]
    public List<Item> item { get; set; }

    public class Item
    {
        public string tipoMaq { get; set; }
        public string marca { get; set; }
        public string idadeMediaFrota { get; set; }
        public string quantidade { get; set; }
        public string indOnus { get; set; }
        public string valorMedio { get; set; }
        public string outrasInformacoes { get; set; }
        public string percPropriedade { get; set; }
    }
}


c)将JSON转换为对象:

var str = @"
{
    ""item"": 
    {
        ""tipoMaq"": ""03"",
        ""marca"": ""DAF"",
        ""idadeMediaFrota"": ""1"",
        ""quantidade"": ""2"",
        ""indOnus"": ""true"",
        ""valorMedio"": ""0.00"",
        ""outrasInformacoes"": ""XF105 FTT510 - BCO PACCAR"",
        ""percPropriedade"": ""100.00""
    }
}
";

var obj = JsonConvert.DeserializeObject<MaqVeicEquip>(str);


现在,obj应该包含以下数据:


的数据
希望这能帮助你,或者至少能把你推向一个好的方向。

afdcj2ne

afdcj2ne2#

谢谢你们,我从

public List<Item> item { get; set; }

字符串

public object item { get; set; }


并解决了这个问题。使用dynamic作为类型也解决了这个问题。

aydmsdu9

aydmsdu93#

你不能改变对象化的规则。一个对象将被对象化,一个数组/列表将被对象化为List<Item>。所以,我建议你将Item声明为Object而不是List<Item>。然而,您可以创建一个只读属性,它可以将ItemObject转换为List<Item>,并最终返回List<Item>

相关问题