2017-11-25 150 views
1

我有一个像无法获得DataContractSerializer的反序列化JSON

[DataContract] 
public class BranchFormTemplate 
{ 
    [DataMember] 
    public BasicSettingsTemplate BasicSettings { get; set; } 

    [DataMember] 
    public LclSeedingSettingsTemplate LclSeedingSettings { get; set; } 

    . 
    . 
    . 

一类我想基于被发送到服务器一个JSON文件来实例化。我有像

 HttpPostedFileBase file = Request.Files[0] 
     HttpInputStream stream = file.InputStream; 
     var dcs = new DataContractSerializer(typeof(BranchFormTemplate)); 
     BranchFormTemplate branchFormTemplate = dcs.ReadObject(stream) as BranchFormTemplate; 

,我得到的异常

出现错误反序列化 型BranchFormTemplate的对象。根级别的数据无效。 1号线, 位置1

什么让我困惑的是,这是一个System.Xml.XmlException,我试图读取JSON,而不是XML。我基本上从源代码为JSON格式的互联网上的例子中剥离了我的代码,所以我无法弄清楚我在这里丢失了什么。

回答

2

DataContractSerializer文档指出:

序列化和反序列化一类型的实例为XML流 或使用所提供的数据契约文件。

反序列化JSON,你需要DataContractJsonSerializer

对象序列化的JavaScript对象符号(JSON)和反序列化 JSON数据对象。

请注意,如果您有选择 - 解析JSON有更好的选择。使用最广泛的是JSON.NETNewtonsoft.Json)。

+0

'DataContractJsonSerializer'在2017年是一个不好的建议。我曾建议'NewtonSoft.Json' –

+0

@CamiloTerevinto肯定,补充说这个回答。 – Evk