C# 如何从VB.Net生成特定的JSON输出?
作为一名使用VB.Net 2015社区的VB.Net程序员,我遇到了C#中需要转换为VB的项目,但这次我不明白我在使用什么。我使用的网站服务返回并期望JSON/JOBJECTS结构如下:C# 如何从VB.Net生成特定的JSON输出?,c#,json,vb.net,C#,Json,Vb.net,作为一名使用VB.Net 2015社区的VB.Net程序员,我遇到了C#中需要转换为VB的项目,但这次我不明白我在使用什么。我使用的网站服务返回并期望JSON/JOBJECTS结构如下: var令牌=新{ iss=PARTNERID, product=“twpemp”, sub=“合作伙伴”, siteInfo=new{ type=“id”, id=站点id }, exp=(Int32)DateTime.UtcNow.Add(newtimespan(0,4,30)).Subtract(newda
var令牌=新{
iss=PARTNERID,
product=“twpemp”,
sub=“合作伙伴”,
siteInfo=new{
type=“id”,
id=站点id
},
exp=(Int32)DateTime.UtcNow.Add(newtimespan(0,4,30)).Subtract(newdatetime(1970,1,1)).TotalSeconds
};
在线转换器将其转换为:
Dim EPochTime=DateTime.UtcNow.Add(新时间跨度(0,4,0)).Subtract(新日期时间(1970,1,1)).TotalSeconds
Dim Token=新的,带有{
Key.iss=账号,
Key.product=“twppartner”,
Key.sub=“合作伙伴”,
Key.siteInfo=使用{
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中动态创建这样的东西,其次,这种东西到底叫什么?我之所以称之为结构,是因为没有更好的词语。如果您希望在JSON中输出这些内容时有更大的灵活性,有两种方法: 1) 您可以使用
字典
而不是动态类型。使用字典方法,您可以在运行时添加(或排除)属性。JSON序列化程序将以与序列化动态类型相同的方式输出
var dict = new Dictionary<string, object>() { { "key1", "value1"} };
dict["key2"] = DateTime.Now();
dict["key3"] = 1234567;
if (someCondition){
dict["key4"] = new Dictionary<string, object>() { { "key5", "value5"}, { "key6", "value6"}};
}
上述类可能适用于您介绍的两种场景。未赋值的属性将在JSON中序列化为
null
。只要你传输到的东西没有挂断null
值,你就可以继续了。你的第二个块已经在VB中动态创建了,那么问题出在哪里?序列化结果是否与您需要发送的内容匹配?它们被称为匿名类型。密钥名称从siteID更改为siteID。谢谢你的类型名称,我会研究更多的!那又怎样?您只需根据需要键入不同的属性名称。基于和第二部分,因为您需要它们的数组(显然),所以我只使用了一对具体的类-可能从具有共享部分的类继承。您可以有条件地创建类型a或类型B的集合,就像创建匿名类型一样简单。在研究并遇到障碍之后,我使用了dictionary方法,当与Newtonsoft.Json.JsonConvert.SerializeObject函数结合使用时,我能够读取模式,根据需要创建/修改数据。真棒的答案!谢谢
public class Qwijibo
{
public int? RecordNumber {get;set;}
public string EmployeeCode {get;set;}
public string FirstName {get;set;}
public string MiddleName {get;set;}
public string LastName {get;set;}
public string Designation {get;set;}
public string Home1 {get;set;}
public string Department {get;set;
}