【问题标题】:Serializing JSON object error of Generic type序列化通用类型的 JSON 对象错误
【发布时间】:2015-01-06 18:44:31
【问题描述】:

我正在尝试序列化我在这里创建的对象:

using (MemoryStream memStream = new MemoryStream())
{
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(CaseTreatment));
    ser.WriteObject(memStream, ct);
}

这里是ctList<CaseTreatment> ct = new List<CaseTreatment>();

每当我的代码点击 ser.WriteObject(memStream, ct); 时,我都会收到以下错误:

Type 'System.Collections.Generic.List`1[[FileUpload.Models.CaseTreatment, FileUpload,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' with data contract name 
'ArrayOfCaseTreatment:http://schemas.datacontract.org/2004/07/FileUpload.Models' is 
not expected. Consider using a DataContractResolver or add any types not known 
statically to the list of known types - for example, by using the KnownTypeAttribute 
attribute or by adding them to the list of known types passed to 
DataContractSerializer.

我的CaseTreatment 对象如下所示:

[DataContract]
public class CaseTreatment
{
    [DataMember]
    public Bridge BridgeTreatment;
}

Bridge 看起来像这样:

[DataContract]
public class Bridge : CaseGeneric
{
    [DataMember]
    public bool IsBridgeTreatment;

    public Bridge(XElement treatment, IEnumerable<XElement> orderDetails)
    {
        var tn = Util.GetTitle(treatment);
        this.Instruction = Util.GetInstruction(tn);
        this.Id = 2;
        this.Name= "Bridge";
        this.Something = Util.GetSomething(tn);
    }

    public Bridge()
    {

    }

}

Something 是另一个对象:

[DataContract]
public class Something
{
    [DataMember]
    public string Number;
}

CaseGeneric 拥有所有这些:

[DataContract]
public class CaseGeneric
{
    [DataMember]
    public string Instruction;
    [DataMember]
    public int Id;
    [DataMember]
    public string Name;
    [DataMember]
    public List<Something> Something;
}

有人可以帮忙吗?如果您需要更多信息,请告诉我,我将非常乐意添加/编辑任何内容或回答任何问题。我想我可能需要用[KnownType(typeof(blah))] 来装饰我的对象,我只是不知道在哪里和哪个。

【问题讨论】:

    标签: c# serialization


    【解决方案1】:

    您正试图在列表中写入一个对象。尝试改变 DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(CaseTreatment));DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(List&lt;CaseTreatment&gt;));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-29
      • 2022-12-21
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多