C# 将Json对象转换为列表
我有一个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" }
"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我将如何形成此标记取决于我,我只想浏览这些值。@在_分数下:请参阅编辑