Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用[JsonProperty]将Json参数与类型列表中的C#类属性匹配_C#_Json_Json.net - Fatal编程技术网

使用[JsonProperty]将Json参数与类型列表中的C#类属性匹配

使用[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")]

我正在尝试反序列化以下Json响应(使用Json.NET):

转换为此类型的对象:

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