使用[JsonProperty]将Json参数与类型列表中的C#类属性匹配
我正在尝试反序列化以下Json响应(使用Json.NET): 转换为此类型的对象:使用[JsonProperty]将Json参数与类型列表中的C#类属性匹配,c#,json,json.net,C#,Json,Json.net,我正在尝试反序列化以下Json响应(使用Json.NET): 转换为此类型的对象: class Poll { [JsonProperty("pollid")] public int pollid { get; set; } [JsonProperty("question")] public string question { get; set; } [JsonProperty("start")]
class Poll
{
[JsonProperty("pollid")]
public int pollid { get; set; }
[JsonProperty("question")]
public string question { get; set; }
[JsonProperty("start")]
public DateTime start { get; set; }
[JsonProperty("end")]
public DateTime end { get; set; }
[JsonProperty("category")]
public string category { get; set; }
// PROBLEM AREA
[JsonProperty("0")] // Json parameter names are 0 to 9. How can I 'match' these to the List elements?
public List<string> polloptions { get; set; }
}
类轮询
{
[JsonProperty(“pollid”)]
公共int pollid{get;set;}
[JsonProperty(“问题”)]
公共字符串问题{get;set;}
[JsonProperty(“开始”)]
公共日期时间开始{get;set;}
[JsonProperty(“结束”)]
公共日期时间结束{get;set;}
[JsonProperty(“类别”)]
公共字符串类别{get;set;}
//问题领域
[JsonProperty(“0”)]//Json参数名称为0到9。如何将这些名称与列表元素“匹配”?
公共列表选项{get;set;}
}
创建列表时如何使用[JsonProperty]
属性?(假设此列表中包含的Json参数名称为“0”到“9”)。在过去的几个小时里,我一直在尝试各种不同的方法,但运气不好
非常感谢一个选择是这样做(我首先将
[JsonProperty(“0”)]
从polloptions
中取出):
其中,PollOption
为:
class PollOption
{
public int Name { get; set; }
public string Value { get; set; }
}
反序列化时:
Poll poll = JsonConvert.DeserializeObject<Poll>(json);
JContainer container = (JContainer)JsonConvert.DeserializeObject(json);
var pollOptionNames = container.Where(t => t as JProperty != null)
.Cast<JProperty>().Where(p => int.TryParse(p.Name, out option))
.Select(p => int.Parse(p.Name)).ToList();
var pollOptionValues = container.Where(t => t as JProperty != null)
.Cast<JProperty>().Where(p => int.TryParse(p.Name, out option))
.Select(p => p.Value.Value<string>()).ToList();
poll.polloptions = pollOptionNames.Select((n, i) =>
new PollOption() { Name = n, Value = pollOptionValues[i] }).ToList();
Poll Poll=JsonConvert.DeserializeObject(json);
JContainer容器=(JContainer)JsonConvert.DeserializeObject(json);
var pollOptionNames=container.Where(t=>t作为JProperty!=null)
.Cast().Where(p=>int.TryParse(p.Name,out选项))
.Select(p=>int.Parse(p.Name)).ToList();
var pollOptionValues=container.Where(t=>t作为JProperty!=null)
.Cast().Where(p=>int.TryParse(p.Name,out选项))
.Select(p=>p.Value.Value()).ToList();
poll.polloptions=pollOptionNames.Select((n,i)=>
新的PollOption(){Name=n,Value=pollOptionValues[i]});
您的答案非常详细。我现在就试着实现它。谢谢大家!!您可以使用of type()而不是Where(x=>x as T)
public List<PollOption> polloptions { get; set; }
class PollOption
{
public int Name { get; set; }
public string Value { get; set; }
}
Poll poll = JsonConvert.DeserializeObject<Poll>(json);
JContainer container = (JContainer)JsonConvert.DeserializeObject(json);
var pollOptionNames = container.Where(t => t as JProperty != null)
.Cast<JProperty>().Where(p => int.TryParse(p.Name, out option))
.Select(p => int.Parse(p.Name)).ToList();
var pollOptionValues = container.Where(t => t as JProperty != null)
.Cast<JProperty>().Where(p => int.TryParse(p.Name, out option))
.Select(p => p.Value.Value<string>()).ToList();
poll.polloptions = pollOptionNames.Select((n, i) =>
new PollOption() { Name = n, Value = pollOptionValues[i] }).ToList();