2014-11-25 55 views
0

當然,編寫這種格式的反序列化代碼很容易。我已經做到了,但我不喜歡。「key:value; key:value; key:value; key:value;」中處理序列化的框架格式

single responsibility principle指出我應該有一個只考慮這種序列化的泛型類。而且任務足夠通用,可以由框架來應對。

+0

會'value'含有分號或換行符或這樣?如果是這樣,語法如何告訴分號是'value'的一部分,而分號除了分隔'key:value'的分號? – 2014-11-25 14:09:15

+0

不,鍵和值都是數字。 – Revious 2014-11-25 14:15:49

+0

那麼,這不就是分裂分號和分裂每個冒號? – 2014-11-25 14:16:44

回答

1

如果你把它轉換成一個JSON字符串等(應該很容易)

var jsonArray = 「[{'key':'value'}, {'key':'value'}, {'key':'value'}, {'key':'value'}]」; 

,那麼你可以很容易地Json.NET反序列化到任何你想要的和需要Json.NET轉換值的護理爲正確的類型爲您提供:

MyType1[] result = JsonConvert.Deserialize<MyType1[]>(jsonArray); 
MyType2[] result = JsonConvert.Deserialize<MyType2[]>(jsonArray); 

public class MyType1 
{ 
    public string key { get; set; } 
    public string value { get; set; } 
} 

public class MyType2 
{ 
    public string key { get; set; } 
    public double value { get; set; } 
} 

,甚至就像一本字典(我希望我的語法正確,我沒有測試):

var jsonDic = 「{{'key':'value'}, {'key':'value'}, {'key':'value'}, {'key':'value'}}」; 
var result = JsonConvert.Deserialize<Dictionary<string, string>>(jsonDic); 

單責任類(只是作爲例子):

public class KeyValueParser 
{ 
    public static TResult ParseKeyValueString<TResult>(string keyValueString) 
    { 
     keyValueString = ConvertToJson(keyValueString); 
     TResul result = JsonConvert.DeserializeObject<TResult>(keyValueString); 
     return result; 
    } 

    private static string ConvertToJson(string keyValueString) 
    { 
     // convert keyValueString to json 
    } 
} 

用法

var jsonDic = 「{{'key':'value'}, {'key':'value'}, {'key':'value'}, {'key':'value'}}」; 
var result = KeyValueParser.ParseKeyValueString<Dictionary<string, string>>(jsonDic); 
0

我真的不明白這個問題。

如果它是你的程序做了很多事情,然後將該功能移動到一些很容易獲得的區域(或者如果你的系統需要它,則可以使用nuget包)。如果它發生在你的代碼中的一個地方,那麼它就非常接近那個地方。

+0

也許在聊天中說話會很有趣。 – Revious 2014-11-25 13:50:08

相關問題