Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从VB.Net生成特定的JSON输出?_C#_Json_Vb.net - Fatal编程技术网

C# 如何从VB.Net生成特定的JSON输出?

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

作为一名使用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(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;
}