2011-05-25 49 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); 

好运。