【发布时间】:2017-06-08 14:22:21
【问题描述】:
作为一名使用 VB.Net 2015 社区的 VB.Net 程序员,我在 C# 中遇到了需要转换为 VB 的项目,但这次我不明白我在使用什么。我正在使用的网站服务返回并期望 JSON / JOBJECTS 结构,例如:
var token = new {
iss = PARTNERID,
product = "twpemp",
sub = "partner",
siteInfo = new {
type = "id",
id = SITEID
},
exp = (Int32)DateTime.UtcNow.Add(new TimeSpan(0, 4, 30)).Subtract(new DateTime(1970, 1, 1)).TotalSeconds
};
在线转换器将其转换为:
Dim EPochTime = DateTime.UtcNow.Add(New TimeSpan(0, 4, 0)).Subtract(New DateTime(1970, 1, 1)).TotalSeconds
Dim Token = New With {
Key .iss = AccNumber,
Key .product = "twppartner",
Key .sub = "partner",
Key .siteInfo = New With {
Key .type = "id",
Key .id = Site},
Key .exp = EPochTime
}
我需要动态创建这种类型的结构,因为“键名”和值会根据返回的内容和需要发回的内容而变化。例如,根据上面的 siteid,返回的结构可能包含以下内容:
"Results": [
{
"RecordNumber": 000001,
"EmployeeCode": "0001",
"FirstName": "John",
"MiddleName": "A",
"LastName": "Dow",
"Designation": "Worker",
"Home1": "Press",
},
{
"RecordNumber": 000002,
"EmployeeCode": "0002",
"FirstName": "Jane",
"MiddleName": "b",
"LastName": "Dow",
"Designation": "Helper",
"Home1": "Office",
}
}
对于我提交查询并最终需要更新的下一个客户,可能有:
"Results": [
{
"RecordNumber": 12345,
"EmployeeCode": "231",
"FirstName": "Erick",
"MiddleName": "G",
"LastName": "Smith",
"Department": "Electrial",
},
{
"RecordNumber": 732456,
"EmployeeCode": "853",
"FirstName": "Fred",
"MiddleName": "W",
"LastName": "Kerber",
"Department": "Electrial",
}
}
两者的区别是一个有“部门”,一个没有。此结构会根据第一次调用的 siteID 发生变化。
我的主要问题是如何在 VB.NET 中动态创建类似的东西,其次,这种东西到底叫什么?我称它为缺乏更好用词的结构。
【问题讨论】:
-
您的第二个块已经在 VB 中动态创建了,那么问题出在哪里?序列化结果是否与您需要发送的匹配?它们被称为匿名类型
-
键名从 siteID 更改为 siteID。感谢您的类型名称,我将对此进行更多研究!弗雷德
-
那又怎样?您只需根据需要输入不同的属性名称。基于第二部分,因为你想要一个数组(显然),我只使用一对具体的类——也许它们继承自一个具有共享部分的类。您可以像创建匿名类型一样有条件地创建类型 A 或类型 B 的集合