我有一个使用Web API的WPF / .Net Core 3.0应用程序。 它在API端点上执行GET,然后尝试反序列化JSON。 但是,尝试反序列化DateTime字段时给出错误。 这是代码:
private HttpClient httpClient = new HttpClient();
private async Task getclients()
{
var serializer = new DataContractJsonSerializer(typeof(List<ClientGetDto>));
var streamTask = httpClient.GetStreamAsync("https://mywebapp.com/api/Clients");
List<ClientGetDto> clientDtos = serializer.ReadObject(await streamTask) as List<ClientGetDto>;
}
ClientGetDto模型如下:
{
public int Id { get; set; }
public string ClientCode { get; set; }
public string ApiUrl { get; set; }
public string CompanyName { get; set; }
public string FranchiseName { get; set; }
public int? ProLicenses { get; set; }
public int? LiteLicenses { get; set; }
public int? ProSalesLicenses { get; set; }
public int? LiteSalesLicenses { get; set; }
public bool? Isactive { get; set; }
public DateTime? StartOfAgreementDate { get; set; }
public int? DebitOrderDay { get; set; }
public DateTime? DebitOrderStartDate { get; set; }
public decimal? ContractAmount { get; set; }
public bool? DebitOrderFormReceived { get; set; }
public bool? CancellationReceived { get; set; }
public DateTime? CancellationDate { get; set; }
public string CompanyRegNo { get; set; }
public string DbUrl { get; set; }
public string DbName { get; set; }
public double? CloudStorageQuota { get; set; }
public string Comments { get; set; }
public int? FranchiseId { get; set; }
public bool? IsTestDb { get; set; }
public bool? IsGumtreeRegistered { get; set; }
public int? FusionClientId { get; set; }
public string CountryCode { get; set; }
}
,API返回的JSON是:
[
{
"id": 3,"clientCode": "cx0007","apiUrl": "https://mywebapp/api","companyName": "ACME Company","franchiseName": "ACME Franchise","proLicenses": 1,"liteLicenses": 0,"proSalesLicenses": 0,"liteSalesLicenses": 0,"isactive": true,"startOfAgreementDate": "2007-08-01T00:00:00","debitOrderDay": 1,"debitOrderStartDate": "2012-03-01T00:00:00","contractAmount": 695.00,"debitOrderFormReceived": true,"cancellationReceived": false,"cancellationDate": "2012-10-18T00:00:00","companyRegNo": "","dbUrl": "mydb.co.za","dbName": "db1","cloudStorageQuota": 5.0,"comments": null,"franchiseId": null,"isTestDb": false,"isGumtreeRegistered": false,"fusionClientId": null,"countryCode": "US"
},...
]
我得到的错误是:
“反序列化类型的对象时发生错误 System.Collections.Generic.List`1 [[PropWorxManager.DTOs.ClientGetDto, PropWorxManager,版本= 1.0.0.0,文化=中性, PublicKeyToken = null]]。 DateTime内容“ 2007-08-01T00:00:00”没有 根据需要,以'\ / Date('开头,以')\ /'结尾 JSON。“} System.Runtime.Serialization.SerializationException
经过一些研究,我尝试了这一点:
var settings = new DataContractJsonSerializerSettings
{
DateTimeFormat = new System.Runtime.Serialization.DateTimeFormat("o")
};
var serializer = new DataContractJsonSerializer(typeof(List<ClientGetDto>),settings);
但这会导致此错误:
“反序列化类型的对象时发生错误 System.Collections.Generic.List`1 [[PropWorxManager.DTOs.ClientGetDto, PropWorxManager,版本= 1.0.0.0,文化=中性, PublicKeyToken = null]]。 字符串'2007-08-01T00:00:00'无法识别 作为有效 DateTime。“} System.Runtime.Serialization.SerializationException
任何建议都将受到欢迎。谢谢。
P.S。如果有帮助,该API也是用.Net Core 3.0编写的。