汤姆,
在我将数据合约复制到我的解决方案后,通过对数据合约进行一些小的更改,我能够让这些相同的数据合约 (https://msdn.microsoft.com/en-us/library/jj870778.aspx) 在我的项目中工作。我应该注意,我使用 Json.Net 6.0.3 进行反序列化,而不是 DataContractJsonSerializer。我不知道这是否会有所不同。
首先我改变了这个:
public class Response
{
[DataMember(Name = "copyright", EmitDefaultValue = false)]
public string Copyright { get; set; }
[DataMember(Name = "brandLogoUri", EmitDefaultValue = false)]
public string BrandLogoUri { get; set; }
[DataMember(Name = "statusCode", EmitDefaultValue = false)]
public int StatusCode { get; set; }
[DataMember(Name = "statusDescription", EmitDefaultValue = false)]
public string StatusDescription { get; set; }
[DataMember(Name = "authenticationResultCode", EmitDefaultValue = false)]
public string AuthenticationResultCode { get; set; }
[DataMember(Name = "errorDetails", EmitDefaultValue = false)]
public string[] errorDetails { get; set; }
[DataMember(Name = "traceId", EmitDefaultValue = false)]
public string TraceId { get; set; }
[DataMember(Name = "resourceSets", EmitDefaultValue = false)]
public ResourceSet[] ResourceSets { get; set; }
}
对此(唯一的变化是将泛型类型添加到类和 ResourceSet 属性):
public class Response<T>
{
[DataMember(Name = "copyright", EmitDefaultValue = false)]
public string Copyright { get; set; }
[DataMember(Name = "brandLogoUri", EmitDefaultValue = false)]
public string BrandLogoUri { get; set; }
[DataMember(Name = "statusCode", EmitDefaultValue = false)]
public int StatusCode { get; set; }
[DataMember(Name = "statusDescription", EmitDefaultValue = false)]
public string StatusDescription { get; set; }
[DataMember(Name = "authenticationResultCode", EmitDefaultValue = false)]
public string AuthenticationResultCode { get; set; }
[DataMember(Name = "errorDetails", EmitDefaultValue = false)]
public string[] errorDetails { get; set; }
[DataMember(Name = "traceId", EmitDefaultValue = false)]
public string TraceId { get; set; }
[DataMember(Name = "resourceSets", EmitDefaultValue = false)]
public ResourceSet<T>[] ResourceSets { get; set; }
}
然后我改变了这个:
public class ResourceSet
{
[DataMember(Name = "estimatedTotal", EmitDefaultValue = false)]
public long EstimatedTotal { get; set; }
[DataMember(Name = "resources", EmitDefaultValue = false)]
public Resource[] Resources { get; set; }
}
到这里:
public class ResourceSet<T>
{
[DataMember(Name = "estimatedTotal", EmitDefaultValue = false)]
public long EstimatedTotal { get; set; }
[DataMember(Name = "resources", EmitDefaultValue = false)]
public T[] Resources { get; set; }
}
一切正常。