2017-11-25 238 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