【问题标题】:JSON array is not created properly for my scenario in json.net没有为我在 json.net 中的场景正确创建 JSON 数组
【发布时间】:2013-02-16 10:43:32
【问题描述】:

我想在 C# 中使用 json.net 创建一个 json 字符串。但是 json 数组没有像我预期的那样创建。这是我的代码:

  markInfo[] MarkUpdate1=new markInfo[2];
            string jsonString = JsonConvert.SerializeObject(new { MarkUpdate =MarkUpdate1 }, Formatting.Indented);
            return jsonString;

public class markInfo
        {
            List<string> FinalMarks = new List<string>();
            List<string> EvalMarks = new List<string>();
        }

我的预期输出是:

{
    "MarkUpdate":[
        {
        "FinalMarks":[
            {
            }
         ]  
        },
        {               
        "EvalMarks":[
            {

            }
            ]
    }
    ]
}   

但它产生了以下输出:

{
  "MarkUpdate": [
    null,
    null
  ]
}

【问题讨论】:

  • FWIW,您的“预期输出”是无效的 JSON。 (概念上很好,只是语法错误。所有属性名称都必须用双引号括起来,不能用单引号,也不能不用引号。)
  • @T.J.Crowder :是的,你是对的......我会更新我的问题......
  • @Saravanan:你想要一个每个都有一个空对象的数组,还是你真的想要空数组?
  • @ArjanEinbu:实际上这不是最终的 json 字符串。我现在正在构建基础。所以,现在“MarkUpdate”是一个包含名为“FinalMarks”和“EvalMarks”的两个元素的数组(两者也是一个数组)。然后我可以添加两个元素的值......

标签: c# asp.net json json.net


【解决方案1】:

您正在创建一个匿名类型,该类型具有 MarkUpdate 属性,该属性分配了不包含对象实例的数组的值。

您是否要输出MarkUpdate 的一个实例?在这种情况下,删除您的数组,实例化您的 markInfo 类并将其序列化。

您还应该将您的FinalMarksEvalMarks 属性设置为不公开。

string jsonString = 
    JsonConvert.SerializeObject(new MarkInfo(), Formatting.Indented);
return jsonString;

public class MarkInfo
{  
    private List<string> finalMarks;
    private List<string> evalMarks;

    public List<string> FinalMarks
    { 
       get { return this.finalMarks ?? (this.finalMarks = new List<string>()); }
       set { this.finalMarks = value; }        
    }

    public List<string> EvalMarks
    { 
       get { return this.evalMarks ?? (this.evalMarks = new List<string>()); }
       set { this.evalMarks = value; }        
    }
}

【讨论】:

  • 这是你的输出 json { "MarkUpdate": { "FinalMarks": [], "EvalMarks": [] } } 你能像我上面的要求那样做吗?
【解决方案2】:

这一行:

markInfo[] MarkUpdate1=new markInfo[2];

...创建markInfo 的数组,但不创建实例;两个数组 slots 都是空的。所以至少你需要创建它们:

markInfo[] MarkUpdate1=new markInfo[2];
markInfo[0] = new markInfo();
markInfo[1] = new markInfo();

不过,这仍然不会为您提供“预期输出”,因为您的预期输出只有一个条目,但您的代码定义了两个条目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2016-09-03
    相关资源
    最近更新 更多