2011-05-25 46 views
0

使用.NET的DataContractJsonSerializer,我想反序列化一個JSON對象到我定義的類中。
但是,反序列化的對象比我需要的字段更多。
有沒有辦法讓它反序列化我在相應類中指定的字段?
我試圖避免這種SerializationException反序列化JSON對象時可以省略字段嗎?

數據合同類型「XXX」,因爲所需的數據成員「YYY」未找到無法反序列化。

+0

也許可以使用['JavaScriptSerializer'](http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptconverter.aspx)並製作自己的['JavaScriptConverter'] (http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptconverter.aspx)? (除非DataContractJsonSerializer具有指定反序列化實現的相同能力...) – 2011-05-25 18:01:10

+0

的確,類[確實有方法](http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization .json.datacontractjsonserializer.datacontractsurrogate.aspx)使用['IDataContractSurrogate'](http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.idatacontractsurrogate.aspx)。 – 2011-05-25 18:03:48

回答

3

這是我如何解決.NET中的大部分JSON錯誤。我使用JSON.NET而不是內置的。

http://json.codeplex.com/

這裏有一個簡單的例子,從他們的文檔無恥地採取:

Product product = new Product(); 

product.Name = "Apple"; 
product.Expiry = new DateTime(2008, 12, 28); 
product.Price = 3.99M; 
product.Sizes = new string[] { "Small", "Medium", "Large" }; 

string output = JsonConvert.SerializeObject(product); 
//{ 
// "Name": "Apple", 
// "Expiry": "\/Date(1230375600000+1300)\/", 
// "Price": 3.99, 
// "Sizes": [ 
// "Small", 
// "Medium", 
// "Large" 
// ] 
//} 

Product deserializedProduct = JsonConvert.DeserializeObject<Product>(output); 

好運。