繁体   English   中英

如何在 C# ASP.Net Web API 上序列化 XML 数据类型/格式?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM