我正在尝试以这种格式生成一个 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() 中几乎给了我想要的东西,但我没有"标头"或"数据"名称。
我开始认为这不能用序列化对象()来完成?
这是一种奇怪的输出格式,但如果你不介意稍微改变你的结构,你可以得到你想要的结果。 首先,您需要将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。
如果您想演示任何这些技术,请告诉我。
该特定 JSON 无法直接使用 SerializeObject
完成,因为您在 JSON 中的同一数组中同时具有数组和对象类型。在数组中,不能混合不同类型的对象(对象结构或对象和数组)。