将Json对象转换为List

时间:2015-07-23 01:24:22

标签: c# json web

我有这个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;}
    }
    

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

根据Rob Stewart的建议,NewtonSoft.JSON是进入IMO的最佳方式。您可以在控制台应用中添加以下内容:

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();