簡體   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