2014-02-24 25 views
2

有沒有辦法在使用反序列化時獲取$ type屬性?我使用TypeNameHandling進行序列化,但是當我反序列化時,我沒有包含類型信息的程序集。我需要使用類型名稱將其存儲在正確的集合中,它看起來像$ type不會傳遞給JObject。反序列化到JObject時獲取類型名稱

編輯:如果我反序列化爲一個JObject,我可以得到$類型,但是如果我反序列化爲具有對象作爲屬性的類,則類型爲null。不知道爲什麼它的json中存在$ type。下面的例子:

public class Container { 
    public object Test { get; set; } 
} 

而且deserilization代碼

var container = new Container { 
    Test = new Snarfblat() 
}; 


var json = JsonConvert.SerializeObject(container, 
new JsonSerializerSettings { 
    TypeNameHandling = TypeNameHandling.Objects 
}); 
var deserializedContainer = JsonConvert.DeserializeObject<Container>(json); 

var type = ((JObject) deserializedContainer.Test)["$type"]; 
// Type is null 

var deserializedContainer2 = JsonConvert.DeserializeObject<JObject>(json); 

var type2 = deserializedContainer2["Test"]["$type"]; 
// Type is snarfblat 

回答

2

您可以防止Json.Net通過設置MetadataPropertyHandlingIgnore消費$type屬性,當你反序列化:

var deserializedContainer = JsonConvert.DeserializeObject<Container>(json, 
    new JsonSerializerSettings { 
     MetadataPropertyHandling = MetadataPropertyHandling.Ignore 
    }); 

var type = ((JObject) deserializedContainer.Test)["$type"]; 
// Type is Snarfblat 

小提琴:https://dotnetfiddle.net/VBGVue

+0

有趣的是,我能夠獲得類型,如果我反序列化爲JObject而不是包含對象的類。查看我的更新。 –

相關問題