![](/img/trans.png)
[英]Questions: how can i change the output and serialize of xml and null values in web api asp.net 2?
[英]How to serialize XML datatype/format on C# ASP.Net Web API?
我在使用 OData 查詢從 API 獲取 XML 數據類型時遇到問題,當我使用 OData 查詢獲取 XML 數據類型或格式化時,它給我一個錯誤
InvalidDataContractException:無法序列化類型“Microsoft.AspNetCore.OData.Query.Wrapper.SelectSome`1[OData_Web_API.Models.User]”。 考慮使用 DataContractAttribute 屬性對其進行標記,並使用 DataMemberAttribute 屬性對其所有要序列化的成員進行標記。 或者,您可以確保該類型是公共的並且具有無參數構造函數 - 然后將序列化該類型的所有公共成員,並且不需要任何屬性。
但是如果沒有對 API 的 OData 查詢,一切都很好。
Model
// <auto-generated> This file has been auto generated by EF Core Power Tools. </auto-generated>
#nullable disable
using Microsoft.AspNetCore.OData.Query;
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;
namespace OData_Web_API.Models
{
[DataContract]
public partial class User
{
[DataMember]
public int UserId { get; set; }
[DataMember]
public Guid? UserGuid { get; set; }
[DataMember]
public string Username { get; set; }
[DataMember]
public string ApplicationName { get; set; }
[DataMember]
public string Email { get; set; }
[DataMember]
public string Comment { get; set; }
[DataMember]
public string Password { get; set; }
[DataMember]
public string PasswordQuestion { get; set; }
[DataMember]
public string PasswordAnswer { get; set; }
[DataMember]
public bool IsApproved { get; set; }
[DataMember]
public DateTime? LastActivityDate { get; set; }
[DataMember]
public DateTime? LastLoginDate { get; set; }
[DataMember]
public DateTime? LastPasswordChangedDate { get; set; }
[DataMember]
public DateTime? CreationDate { get; set; }
[DataMember]
public bool IsOnLine { get; set; }
[DataMember]
public bool IsLockedOut { get; set; }
[DataMember]
public DateTime? LastLockedOutDate { get; set; }
[DataMember]
public int? FailedPasswordAttemptCount { get; set; }
[DataMember]
public DateTime? FailedPasswordAttemptWindowStart { get; set; }
[DataMember]
public int? FailedPasswordAnswerAttemptCount { get; set; }
[DataMember]
public DateTime? FailedPasswordAnswerAttemptWindowStart { get; set; }
[DataMember]
public bool SaasAdmin { get; set; }
[DataMember]
public int? DefaultIscinstanceId { get; set; }
[DataMember]
public bool TouAgreed { get; set; }
[DataMember]
public DateTime? TouDate { get; set; }
[DataMember]
public int ProfileId { get; set; }
[DataMember]
public bool IsDel { get; set; }
[DataMember]
public DateTime ModTime { get; set; }
[DataMember]
public int ModId { get; set; }
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
[DataMember]
public string MiddleInitial { get; set; }
[DataMember]
public string MaidenName { get; set; }
[DataMember]
public int PrefFirstView { get; set; }
[DataMember]
public int PrefFirstWidth { get; set; }
[DataMember]
public bool SurveyAdmin { get; set; }
[DataMember]
public int? PrimOrgId { get; set; }
[DataMember]
public bool AllowExtAuth { get; set; }
[DataMember]
public string TcuserId { get; set; }
[DataMember]
public bool UseUi2020 { get; set; }
public virtual UserProfile Profile { get; set; }
}
}
Controller
// GET: api/Users
[HttpGet("get.{format}"), FormatFilter]
[EnableQuery]
public IEnumerable<User> GetUsers()
{
if (_context.Users == null)
{
return (IEnumerable<User>)NotFound();
}
return _context.Users;
}
這是在沒有 OData 查詢的情況下工作的 API
https://localhost:7125/api/Users/get.xml
這是 API,它有一個不起作用的 OData 查詢並給我錯誤
https://localhost:7125/api/Users/get.xml?$select=UserId
希望任何人都可以提供幫助,被困在這個錯誤中將近一個星期
如異常消息所述,您可以嘗試將公共無參數構造函數添加到您的用戶 class,如下所示:
[DataContract]
public partial class User
{
public User()
{
}
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.