C# 将Json对象转换为列表

C# 将Json对象转换为列表,c#,json,web,C#,Json,Web,我有一个Json字符串: "UserProperties": [ { "Id": "3", "values": [ { "prop": "1" } ] }, { "Id": "4", "values": [ { "prop": "1" }, { "prop": "2" }, { "prop": "3" }

我有一个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; }
到目前为止,我所做的是创建一个包含这些Json字符串的类。我从一个非常相似的方法中得到了这段代码

  • 创建一个包装类

    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;}
    }
    
    类包装器{
    [JsonProperty(“UserProperties”)]
    public ValueSet ValueSet{get;set;}
    }
    类值集{
    [JsonProperty(“值”)]
    公共列表值{get;set;}
    公共属性集属性集{get;set;}
    }
    类属性集{
    [JsonProperty(“财产”)]
    公共列表属性{get;set;}
    }
    

  • 我将使用Newtonsoft的Json.NET并将Json数组反序列化到列表中


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


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

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

    抱歉,我忘了,我在newton soft下使用了此方法进行反序列化。抱歉,我忘了,我在newton soft下使用了此方法进行反序列化。感谢Matt,我成功解析了这些json字符串,但我想要的是获得这些Id、值和prop1、2、3实体。我的意思是,我仍然可以创建一个循环,让我通过那些更深层次的值。好吧,这就是我真正想要的:Id+“:”+prop1,2,3等等。。因此,上述json字符串的预期结果将是:3:1和4:1,2,3我将如何形成此标记取决于我,我只想浏览这些值。@在_score下:请参阅EditThank Matt,我设法解析了这些json字符串,但我想要的是获得这些Id、值和prop1、2、3实体。我的意思是,我仍然可以创建一个循环,让我通过那些更深层次的值。好吧,这就是我真正想要的:Id+“:”+prop1,2,3等等。。因此,上述json字符串的预期结果将是:3:1和4:1,2,3我将如何形成此标记取决于我,我只想浏览这些值。@在_分数下:请参阅编辑