json.net - 以这种格式生成JSON的数据结构是什么?

时间:2014-11-17 01:34:57

标签: .net json serialization json.net

我正在尝试以这种格式生成JSON字符串:

{
  "item": [
    {
      "text": "Past 7 days",
      "value": "274057"
    },
    [
      "38594",
      "39957",
      "35316",
      "35913",
      "36668",
      "45660",
      "41949"
    ]
  ]
}

我尝试使用以下结构与JsonConvert.SerializeObject()

public struct itemheader {
        public string text;
        public decimal value;
}
public struct itemdata
{
    public itemheader header;
    public decimal[] data;
}
public struct TrendLineData
{
    public itemdata[] item;
}

因此,创建一个TrendLineData类型的变量并将其提供给JsonConvert.SerializeObject()几乎可以得到我想要的内容,但我不是“标题”或“数据”名称。

我开始认为使用SerializeObject()无法做到这一点?

2 个答案:

答案 0 :(得分:1)

这是一种奇怪的输出格式,但如果您不介意稍微更改结构,则可以获得所需的结果。首先,您需要将item结构的TrendLineData成员更改为object[],然后您可以在数组中添加所需内容。此外,如果你想要数字周围的引号,那么它们将需要是字符串,而不是十进制。这是一个例子:

class Program
{
    static void Main(string[] args)
    {
        TrendLineData data = new TrendLineData
        {
            item = new object[]
            { 
                new itemheader
                {
                    text = "Past 7 days",
                    value = "274057"
                },
                new string[]
                {
                    "38594",
                    "39957",
                    "35316",
                    "35913",
                    "36668",
                    "45660",
                    "41949"
                }
            }
        };

        string json = JsonConvert.SerializeObject(data, Formatting.Indented);
        Console.WriteLine(json);
    }
}

public struct TrendLineData
{
    public object[] item;
}

public struct itemheader
{
    public string text;
    public string value;
}

输出:

{
  "item": [
    {
      "text": "Past 7 days",
      "value": "274057"
    },
    [
      "38594",
      "39957",
      "35316",
      "35913",
      "36668",
      "45660",
      "41949"
    ]
  ]
}

如果你想保持结构不变,还有其他选择:

  • 你可以使用JObjects / JArrays手动构建你的JSON结构并序列化它;
  • 您可以在结构上使用LINQ转换来创建所需“形状”中的匿名对象并将其序列化,或者
  • 您可以创建一个JsonConverter,将您的对象结构转换为正确的JSON。

如果您想要演示任何这些技巧,请告诉我们。

答案 1 :(得分:0)

由于您在JSON中的同一数组中同时拥有数组和对象类型,因此无法使用SerializeObject直接完成特定的JSON。在数组中,您不能混合不同类型的对象(对象结构或在您的case对象和数组中)。