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;
}
}
}
答案 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}