我正在尝试反序列化以下 Json 响应(使用 Json.NET):
[{"pollid":"1", "question":"This is a test", "start":"2011-06-28", "end":"2012-03-21", "category":"Roads", "0":"Yes", "1":"No"} … ]
进入这种类型的对象:
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]
属性? (假设这个List中要包含的Json参数名称为“0”到“9”)。在过去的几个小时里,我一直在尝试不同的方法,但都没有成功。
非常感谢
最佳答案
一个选择是做这样的事情(我首先关闭了 [JsonProperty("0")]
polloptions
):
int option;
Poll poll = JsonConvert.DeserializeObject<Poll>(json);
JContainer container = (JContainer)JsonConvert.DeserializeObject(json);
poll.polloptions = container.Where(t => t as JProperty != null)
.Cast<JProperty>().Where(p => int.TryParse(p.Name, out option))
.Select(p => p.Value.Value<string>()).ToList();
第一步是按常规反序列化 - 这将处理除 polloptions
之外的所有属性。下一步是反序列化为 JContainer
,这样我们就可以获取单个标记并从具有数字名称的标记中创建一个列表(因此 int.TryParse(p.Name,输出选项)
)。
这将为您提供一个包含是/否值的列表。如果您还想要投票选项的名称以及值,请考虑以下内容:
将 polloptions
属性更改为:
public List<PollOption> polloptions { get; set; }
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();
关于c# - 使用 [JsonProperty] 将 Json 参数与类型为 List 的 C# 类属性匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13287086/