2017-06-08 52 views
0

VB.Net 2015コミュニティを使用しているVB.Netプログラマであるため、VBに変換する必要がある項目をC#で見つけましたが、今回は何を処理しているのか分かりません。ウェブサイトのサービス私はリターンを消費するなどJSON/JOBJECTS構造期待している:私は動的に「キーので、構造のこのタイプを作成する必要がVB.Netから特定のJSON出力を生成するにはどうすればよいですか?

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 
} 

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

オンラインコンバータはにこれを変換します返されたものに応じて値が変わり、返される必要があります。私はのためのクエリを提出する次のクライアントのために

"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", 
} 
} 

、そして最終的に持っているかもしれないと更新する必要があります:たとえば、上記のサイトIDに応じて、戻っ構造のようなものを持っているかもしれません

"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", 
} 
} 

2つの違いは、「部署」と「部署」の違いです。この構造は、最初の呼び出しからのsiteIDに基づいて変化します。

私の主な質問は、このようなものをVB.NETで動的に作成する方法です。副次的に、このタイプのものは何ですか?私はそれをより良い言葉の欠如のための構造と呼んでいる。

1)あなたが代わりに動的なタイプのDictionary<string,object>使用することができます:あなたはJSONでこのようなものを出力して、もう少し柔軟性をしたい場合は

+0

あなたの2番目のブロックはすでにVBで動的に作成されていますので、問題は何ですか?シリアライズされた結果は、送信する必要があるものと一致していますか? *匿名型と呼ばれます。 – Plutonix

+0

キー名はsiteIDからsiteIDに変更されます。タイプ名をありがとう、私はそれについてもっと研究します!フレッド –

+0

だから何?必要なものに基づいて異なる*プロパティ名を入力するだけです。 Basedと2番目の部分は、(明らかに)それらの配列を必要とするので、私はちょうど2つの具体的なクラスを使用しています - 多分共有された部分を持つクラスから継承します。条件付きで、匿名の型を作成するのと同じように、型Aまたは型Bのコレクションを簡単に作成することができます – Plutonix

答えて

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

2)JSON構造に含まれる可能性のあるすべてのプロパティを持つクラスを作成できます。数値型のオプションのプロパティの場合は、それらをnullableにします。

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の値にぶら下がっていない限り、あなたは良いです。

+1

道路ブロックの調査とヒット後、Newtonsoft.Json.JsonConvert.SerializeObject関数と組み合わせて辞書メソッドを使用しました。スキーマを読み込み、必要に応じてデータを作成/変更することができます。素晴らしい答え!ありがとう! –

関連する問題