2014-09-11 66 views
1

我有一個調用c#exe的perl腳本。我需要傳遞一個數據結構是這樣將Perl哈希變換爲c#keyvaluepair

testA => 123, testB => 111 etc 

我需要構建這個變量在Perl和它傳遞給我的C#exe文件作爲命令行參數。

我選擇在c#中將此值存儲爲perl和keyvaluepair中的散列值。

所以,在Perl代碼,我構建

%test_id 

我有把它傳遞給程序的麻煩。我嘗試了一些東西,但似乎有兩方面都需要解析。像轉換哈希到字符串;然後在c#端將字符串轉換爲kvp。這是預期還是有更好的方法來做到這一點。

這是我嘗試過的一種方法。

for(keys %ids) 
{ 
    my $key = join (":", $_, $ids{$_}); 
    $name = join (";", $key, $name); 
} 

我打電話與

UpdateCode.exe -add $name; 

C#exe文件,這將是像

UpdateCode.exe -add "testA:123;testB:111" 

所以,當C#代碼見此。我必須做

string[] splits = args[1].split(new char[] {';'}); 

    foreach(string split in splits) 
    { 
    //You get the idea 
    //split again and construct KVP 
    } 

好像很多代碼似的。有沒有更好的辦法?我在Perl模塊中嘗試過Dumper,但即使如此,我也需要在C#端解析。

感謝您的期待

+0

您需要序列化和反序列化_somehow_因爲CLI參數始終是純文字。 – knittl 2014-09-11 08:45:35

+1

雙方都使用JSON,已經有序列化和反序列化的庫。 – choroba 2014-09-11 08:47:13

回答

2

使用JSON

C#中有相當的庫來解碼串行化數據。

use strict; 
use warnings; 

use JSON; 

my %test_id = (testA => 123, testB => 111); 

print encode_json(\%test_id); 

輸出:

{"testA":123,"testB":111} 
+0

感謝您的回覆。我仍然需要編寫與c#端解析相同的代碼嗎? – user3606175 2014-09-11 08:53:54

+1

只是谷歌'C#解碼JSON' – Miller 2014-09-11 08:57:22