簡體   English   中英

如何從VB.Net生成特定的JSON輸出?

[英]How do I generate specific JSON output from VB.Net?

作為使用VB.Net 2015社區的VB.Net程序員,我遇到了需要轉換為VB的C#項目,但是這次我不明白我在使用什么。 我正在使用的網站服務會返回並期望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
}

我需要動態創建這種類型的結構,因為“鍵名”和值根據返回的內容和需要發回的內容而改變。 例如,根據上方的站點ID,返回的結構可能包含以下內容:

"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)您可以使用Dictionary<string,object>代替動態類型。 使用字典方法,您可以在運行時添加(或排除)屬性。 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"}};
 }

2)您可以創建一個具有JSON結構可能包括的所有可用屬性的類。 對於數字類型的可選屬性,請將其設置為可空:

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;
}

以上課程可能在您介紹的兩種情況下都適用。 您沒有為其分配值的屬性將在JSON中序列化為null 只要您要傳輸的內容不會掛在null值上,您就可以繼續使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM