【发布时间】:2021-12-06 16:25:57
【问题描述】:
我正在将我们的系统与第 3 方集成。他们发送了一个他们期望的 JSON 示例。 JSON 对我来说似乎不正确。用户对象有一个电子邮件地址,看起来像是被用作reference type's member name instead of value type's member name。换句话说,它不应该是一个用户数组,并且数组中的每个项目都是用户对象,其中“电子邮件”:“example@company.com”作为属性之一?
我要问他们,但也想在这里查看是否有人认为这个 JSON 有问题
{
"users": {
“example@company.com”: {
"First_Name": "John",
"Last_Name": "Doe",
"Member_Id": "XX9008000",
"Mailing_Address": {
"Street": "P O Box 111 ",
"City": "Red City",
"State": "CA",
"Zip": "99999"
}
},
"enrollments": [
{
"Student": "example@company.com",
"Course_Ids": "369,370"
}
]
}
}
我正在使用 Newtonsoft.Json 将 C# 对象转换为 JSON。输出的格式总是引用类型的类型:引用类型的属性/值枚举。
{"users":[{"name":"john","id":"a1"},{"name":"tom","id":"a2"}]}
或
{"users":{"user1":{"name":"john","id":"a1"},"user2":{"name":"tom","id":"a1"}}}
但它永远不可能:
{"users":{"a1":{"name":"john"},"a2":{"name":"tom"}}}
因为a1和a2是值的值类型string Id
它可能是有效的JSON,但可以通过序列化库代码获得吗?还是我必须手动构建它?
【问题讨论】:
-
使用电子邮件地址作为对象的键在语法上对 JSON 有效。然而,奇怪的是电子邮件地址周围的引号字符。对象末尾还缺少一个右花括号。
-
除了缺少的“}”,它在语法上似乎是正确的。语义上存在问题。如果键是复数(“用户”),则预期内容是对象数组而不是单个对象。在当前示例中,无法添加多个用户,因此,复数看起来像是一个错误。我敢打赌,一旦你指出这个观察,他们会给你另一个版本
-
最后缺少的花括号是我的错误。我已经编辑了我的问题。我正在使用 Newtonsoft.Json 将 C# 对象转换为 JSON。输出的格式始终为引用类型名称:引用类型属性/值枚举。电子邮件地址如何按他们想要的方式输出?也就是说,值类型值:引用类型属性/值枚举。除非我手动构建 JSON
-
您应该将其添加到问题中......和/或联系提供商以验证这是一个有效的示例。我希望用户部分是一个数组,但电子邮件地址可能是顶级...并且
enrollments是否与每个用户或整体相关?我怀疑是整体的,因为否则那里不需要电子邮件地址。 -
可能是C#的东西,不过不知道你说的“引用类型”和“值类型”是什么意思。