当然,很容易编写代码从这种格式反序列化。我已经做了,但我不喜欢。
单一职责原则表明我应该有一个只关心这种序列化的泛型类。并且该任务足够通用,可以由框架来处理。
当然,很容易编写代码从这种格式反序列化。我已经做了,但我不喜欢。
单一职责原则表明我应该有一个只关心这种序列化的泛型类。并且该任务足够通用,可以由框架来处理。
如果您将其转换为 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);
我真的不明白这个问题。
如果这是您的程序经常做的事情,那么将该功能移动到也很容易获得的某个区域(或者如果您的很多系统都需要它,则可以使用 nuget 包)。如果它发生在您的代码中的一个地方,那就把它放在离那个地方很近的地方。