[英]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.