1
我有兩個不同的Jsons表示的對象:解析版本JSON
JSON V1:
{
"names":[{"name":John},{"name":Eve}],
"version": 1
}
JSON版:
{
"names":[{"name":"John", "age":22},{"name":"Eve", "age":35}],
"version": 2
}
現在我有類可以解析的第一個版本Json:
[JsonObject("Class")]
public class PeopleEntity
{
public string name{ get; set; }
}
public class People
{
public List<PeopleEntity> names{ get; set; }
public string version{ get; set; }
}
這是如何解析:
result = JsonConvert.DeserializeObject<People>(json_data, new JsonSerializerSettings
{
DefaultValueHandling = DefaultValueHandling.Ignore
});
現在,問題是,解析第二版JSON的請求來了。什麼是解決這個問題的最佳解決方案?
我有一個想法,使接口列表(因爲屬性名稱,它總是存在),並使它的多個實現,每個版本的一個。
那麼,這當然是一個使用json實現的問題。如果你自己推出,答案很簡單,但這可能很瘋狂。那麼你使用哪個JSON庫?你能夠/願意改變嗎?許多庫提供將字符串反序列化爲字典。然後你可以檢查字典,查看'version'並選擇相應的DTO類,然後可以從字典中獲取水分。 – mnemosyn
@mnemosyn我用Newtonsoft庫。我無法改變包含的json。在解析它之前,我知道json的版本(它在文件名中)。 – Krivers
如果您事先知道該版本,有什麼問題?只需序列化到正確的DTO類。 (去)序列化期間擁有兩個類比插入神祕邏輯更容易。保持序列化簡單,稍後再做翻譯,這是低耦合。 – mnemosyn