ASP.NET Web API仅序列化公共成员或属性(忽略字段)

时间:2017-06-29 10:57:37

标签: c# json wcf asp.net-web-api serialization

ASP.NET Web API中是否有可能定义只应序列化公共成员或仅序列化属性?

背景是:我们将每个属性的初始值存储在自己的私有字段中(参见下面的示例)。现在的问题是这些字段也在我们的Rest应用程序中序列化,但这并不是很有用,因为这个API主要由外部客户使用。它也不是删除DataMember属性的选项,因为我们还有WCF服务,需要序列化和传输这些字段。

    [DataMember]
    private bool seasonNameIsInitialized;
    [DataMember]
    private string seasonName;
    [DataMember]
    private string seasonNameInitial;

    /// <summary>
    /// Season Name
    /// </summary>
    [Required]
    [MaxLength(100)]
    [Display(ResourceType = typeof(ResourcesModel), Name = nameof(ResourcesModel.SeasonName))]
    [DatabaseColumn(Name = "BEZ")]
    [DataMember]
    public string SeasonName
    {
        get
        {
            return seasonName;
        }
        set
        {
            string oldSeasonName = seasonName;
            seasonName = value;

            if (seasonNameIsInitialized)
            {
                OnPropertyChanged(oldSeasonName, seasonName);
            }
            else
            { 
                seasonNameInitial = value;
                seasonNameIsInitialized = true;
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

对于JSon序列化,您可以通过设置NewtonSoft属性

来使用[JsonIgnore]
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;

namespace JsonIgnore
{
    class Program
    {
        static void Main(string[] args)
        {
            var obj = new myClass() { Age = 18, Name = "Max" };
            var selializedObj = JsonConvert.SerializeObject(obj);
            Console.WriteLine(selializedObj.ToString());
            Console.ReadLine();
        }
    }

    [DataContract]
    public class myClass
    {
        [JsonIgnore]
        [DataMember]
        public int Age { get; set; }
        [DataMember]
        public string Name { get; set; }
    }
}

[JsonIgnore]属性结果为{"Name" : "Max"}, 没有[JsonIgnore]属性结果的内容为{"Name" : "Max", "Age" : 18}