2017-06-08 110 views
0

作爲使用VB.Net 2015社區的VB.Net程序員,我遇到了需要轉換爲VB的C#中的項目,但是這一次我不明白我在處理什麼。該網站的服務,我消費的回報,並希望像JSON/JOBJECTS結構:如何從VB.Net生成特定的JSON輸出?

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中動態創建類似的東西,其次,究竟是什麼類型的東西叫?我把它稱爲缺乏更好詞彙的結構。

+0

你的第二塊已經在VB中動態創建它,那麼最新的問題是什麼?序列化結果是否與您需要發送的內容匹配?它們被稱爲*匿名類型* – Plutonix

+0

鍵名稱從siteID更改爲siteID。感謝您的類型名稱,我會進一步研究它! Fred –

+0

那又如何?您只需根據您的需要輸入不同的*屬性名稱*。基礎和第二部分,因爲你想他們的數組(顯然),我只是使用一對具體類 - 也許是從一個類與共享部分繼承。您可以像創建匿名類型那樣有條件地創建類型A或類型B的集合 – Plutonix

回答

1

如果你想與輸出這東西在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。只要你傳遞給你的東西不會掛在價值觀上,你就很好。

+1

研究並敲擊路障後,我最終使用了字典方法,該方法與Newtonsoft.Json.JsonConvert.SerializeObject函數結合使用時,我能夠讀取模式,根據需要創建/修改數據。真棒回答!謝謝! –