无法获得DataContractSerializer的反序列化JSON
问题描述:
我有一个像无法获得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格式的互联网上的例子中剥离了我的代码,所以我无法弄清楚我在这里丢失了什么。
答
DataContractSerializer
文档指出:
序列化和反序列化一类型的实例为XML流 或使用所提供的数据契约文件。
反序列化JSON,你需要DataContractJsonSerializer
:
对象序列化的JavaScript对象符号(JSON)和反序列化 JSON数据对象。
请注意,如果您有选择 - 解析JSON有更好的选择。使用最广泛的是JSON.NET
(Newtonsoft.Json
)。
'DataContractJsonSerializer'在2017年是一个不好的建议。我曾建议'NewtonSoft.Json' –
@CamiloTerevinto肯定,补充说这个回答。 – Evk