C# JSON.NET如何创建索引
我的模型中有多个字符串和字符串数组,它们聚集在一个列表中。代码:C# JSON.NET如何创建索引,c#,json.net,C#,Json.net,我的模型中有多个字符串和字符串数组,它们聚集在一个列表中。代码: namespace ReinovaGrafieken.Models { [JsonObject(MemberSerialization.OptIn)] public class Graphs { [JsonProperty] public string Names { get; set; } [JsonProperty] public string[] AnswerHeaders {
namespace ReinovaGrafieken.Models
{
[JsonObject(MemberSerialization.OptIn)]
public class Graphs
{
[JsonProperty]
public string Names { get; set; }
[JsonProperty]
public string[] AnswerHeaders { get; set; }
[JsonProperty]
public string[] AnswersOne { get; set; }
[JsonProperty]
public string[] AnswersTwo { get; set; }
[JsonProperty]
public string[] AnswersThree { get; set; }
[JsonProperty]
public string[] AnswersFour { get; set; }
[JsonProperty]
public string Questions { get; set; }
[JsonProperty]
public string[] AnteOrPost { get; set; }
}
}
但是,当我使用以下代码创建Json时会发生什么情况:
json = JsonConvert.SerializeObject(graphData);
json将以相当奇怪的方式填充。
如果我将每个字符串([])填充一次,我将得到8倍的名称、应答头等。
但每次只填充一个值。其余实例为空。我知道我可以用
NullValueHandling = NullValueHandling.Ignore
但是如果我这样做了,我就不能再使用正确的索引了,因为代码会认为每个名字、应答头等都是一个索引
电流输出:
"0":{
"questionName":null,
"AnswerHeaders":null,
"AnswersOne":null,
"AnswersTwo":null,
"AnswersThree":null,
"AnswersFour":null,
"Questions":"Vraag ante 11 & Vraag post 33",
"AnteOrPost":null
},
预期产出:
"0":{
"questionName": "Vraag 1",
"AnswerHeaders": "Wat vond u",
"AnswersOne": ["2", "3", "4", "5", "6"],
"AnswersTwo": ["23","34","4","3"],
"AnswersThree":["34", "34", "5", "4", "2"].
"AnswersFour":["23","3","4","3","2"],
"Questions":"Vraag ante 11 & Vraag post 33",
"AnteOrPost": "Ante"
},
您当前的输出:
"0":{
"questionName":null,
"AnswerHeaders":null,
"AnswersOne":null,
"AnswersTwo":null,
"AnswersThree":null,
"AnswersFour":null,
"Questions":"Vraag ante 11 & Vraag post 33",
"AnteOrPost":null
},
表示JsonConvert
无法将数组转换为json字符串或表示序列化时未填充数组
通过使用演示数据填充字段,确保正确填充json:
AnswerHeaders = new string[] {"one", "two", "three", "four"};
并检查序列化时的值,这将是查询的良好起点 您当前的输出:
"0":{
"questionName":null,
"AnswerHeaders":null,
"AnswersOne":null,
"AnswersTwo":null,
"AnswersThree":null,
"AnswersFour":null,
"Questions":"Vraag ante 11 & Vraag post 33",
"AnteOrPost":null
},
表示JsonConvert
无法将数组转换为json字符串或表示序列化时未填充数组
通过使用演示数据填充字段,确保正确填充json:
AnswerHeaders = new string[] {"one", "two", "three", "four"};
并检查序列化时的值,这将是查询的良好起点 找到了问题。我给Graphs课打了8次电话,而不是1次。为Json生成232个字符串。之后,我也不必再给索引了。发现了这个问题。我给Graphs课打了8次电话,而不是1次。为Json生成232个字符串。之后,我也不必再给索引了。你能分享预期的JSON输出和实际的JSON输出吗?添加了预期和实际的JSON输出。Json应该有29个实例长,但在预期的输出中实际有232个(29*8)长,我想您是想引用字符串值,否则它不是有效的Json,所以这不可能是预期的输出。你能告诉我们序列化的来源吗?请提供一个-我刚刚尝试了你的代码,我得到了我所期望的。现在还不清楚为什么在指定了字符串数组的情况下,您希望得到的结果是一个整数数组。(我想你不需要那么多属性来证明这个问题。)@Kenneth,啊,这是要引用的。你能分享预期的JSON输出和实际的JSON输出吗?添加了预期和实际的JSON输出。Json应该有29个实例长,但在预期的输出中实际有232个(29*8)长,我想您是想引用字符串值,否则它不是有效的Json,所以这不可能是预期的输出。你能告诉我们序列化的来源吗?请提供一个-我刚刚尝试了你的代码,我得到了我所期望的。现在还不清楚为什么在指定了字符串数组的情况下,您希望得到的结果是一个整数数组。(我想你不需要那么多属性来证明这个问题。)@Kenneth,啊ye,这是要引用的。嘿,Barr,如果我告诉我的json忽略null,我可以“正确”填充json。然后我将得到预期的输出,但是我不能再正确地索引它们了。这是不正确的,因为当我在代码中描述的场景发生时,空值出现了。序列化json时,如果没有给定值,或者由于类型误导而无法进行转换,则会出现空值。如果你想在json中保留空值,你只能忽略空值。嘿,巴尔,如果我告诉我的json忽略空值,我可以“正确”填充它。然后我将得到预期的输出,但是我不能再正确地索引它们了。这是不正确的,因为当我在代码中描述的场景发生时,空值出现了。序列化json时,如果没有给定值,或者由于类型误导而无法进行转换,则会出现空值。只有当您希望json中的空值应该被忽略时,才可以忽略空值。