将Json对象转换为列表

本文关键字:列表 转换 对象 Json | 更新日期: 2023-09-27 18:04:22

我有这个Json字符串:

"UserProperties": [
     {
         "Id": "3", "values": [
             { "prop": "1" }
         ]
     },
     {
         "Id": "4", "values": [
             { "prop": "1" },
             { "prop": "2" },
             { "prop": "3" }
         ]
     }
]

我想把它转换成c#字符串和列表值,像这样:

public list<int> Id { get; set; }
public list<object> values { get; set; }
public int prop { get; set; }

这样我就可以操作我的值了:

foreach( int i in Id)
{
  foreach( object val in values)
  {
    var str = i + '-' + val.prop;
  }
}

到目前为止,我所做的是创建一个类,将包含那些Json字符串。我从一个非常相似的方法得到这段代码。

  1. 创建包装器类

    class Wrapper {
        [JsonProperty("UserPropertiees")]
        public ValueSet valueSet { get; set; }
    }
    class ValueSet{
        [JsonProperty("values")]
        public List<string> values {get;set;}
        public PropertySet propertySet { get; set; }
    }
    class PropertySet{
        [JsonProperty("property")]
        public List<string> property {get;set;}
    }
    

将Json对象转换为列表

我会使用Newtonsoft的Json。. NET并将JSON数组反序列化到List中。

http://www.newtonsoft.com/json/help/html/SerializingCollections.htm

根据Rob Stewart的建议,NewtonSoft。在我看来,JSON是最好的方式。下面是一些你可以放入控制台应用程序的内容:

string json = @"{""UserProperties"": [
     {
         ""Id"": ""3"", ""values"": [
             { ""prop1"": ""1"" }
         ]
     },
     {
         ""Id"": ""4"", ""values"": [
             { ""prop1"": ""1"" },
             { ""prop2"": ""2"" },
             { ""prop3"": ""3"" }
         ]
     }
]}";
            dynamic obj = JObject.Parse(json);
            foreach (var o in obj.UserProperties)
            {
                Console.WriteLine(o.Id);
            }
            Console.ReadLine();

编辑

根据你的评论,这里有一个更完整的例子。试试这个:

dynamic obj = JObject.Parse(json);
            foreach (var o in obj.UserProperties)
            {
                var sb = new StringBuilder();
                sb.Append(o.Id);
                sb.Append(":");
                bool hasProps = false;
                foreach (var value in o.values)
                {
                    if (value.prop1 != null)
                    {
                        sb.Append(value.prop1);
                        sb.Append(',');
                        hasProps = true;
                    }
                    if (value.prop2 != null)
                    {
                        sb.Append(value.prop2);
                        sb.Append(',');
                        hasProps = true;
                    }
                    if (value.prop3 != null)
                    {
                        sb.Append(value.prop3);
                        sb.Append(',');
                        hasProps = true;
                    }
                }
                if (hasProps)
                {
                    sb.Remove(sb.Length - 1, 1); // Remove trailing comma
                }
                Console.WriteLine(sb.ToString());
            }
            Console.ReadLine();