【问题标题】:json.net - what data structure would produce JSON in this format?json.net - 什么样的数据结构会产生这种格式的 JSON?
【发布时间】:2014-11-17 01:34:57
【问题描述】:

我正在尝试以这种格式生成 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() 来完成?

【问题讨论】:

  • 您的 JSON 看起来很奇怪。你有一个数组,位置 0 是一个对象,位置 1 是另一个数组。

标签: .net json serialization json.net


【解决方案1】:

这是一种奇怪的输出格式,但是如果您不介意稍微更改结构,您可以获得所需的结果。首先,您需要将TrendLineData 结构的item 成员更改为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。

如果您想要这些技术的演示,请告诉我。

【讨论】:

【解决方案2】:

那个特定的 JSON 不能直接用 SerializeObject 完成,因为你在 JSON 的同一个数组中同时拥有一个数组和一个对象类型。在数组中,您不能混合不同类型的对象(对象结构或在您的情况下是对象和数组)。

【讨论】:

  • 如果数组为object[],则可以混合类型。
猜你喜欢
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多