【发布时间】:2018-06-04 04:43:15
【问题描述】:
我的 ASP.NET MVC 项目中有一个像这样的简单实体:
public class Folder : EntityData
{
public Folder()
{
IsStub = false;
}
[StringLength(300)]
public string Name { get; set; }
[JsonIgnore]
public bool IsStub { get; set; }
[ForeignKey("ParentFolderObj")]
public string ParentFolder { get; set; }
[JsonIgnore]
public Folder ParentFolderObj { get; set; }
[JsonIgnore]
public virtual ICollection<DesktopFolder> DesktopFolders { get; set; }
[JsonIgnore]
public virtual ICollection<UserFolder> UserFolders { get; set; }
}
EntityData 是 Azure 的 MobileAppServices SDK 提供的类:
public abstract class EntityData : ITableData
{
protected EntityData();
[Key]
[TableColumn(TableColumnType.Id)]
public string Id { get; set; }
[TableColumn(TableColumnType.Version)]
[Timestamp]
public byte[] Version { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Index(IsClustered = true)]
[TableColumn(TableColumnType.CreatedAt)]
public DateTimeOffset? CreatedAt { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
[TableColumn(TableColumnType.UpdatedAt)]
public DateTimeOffset? UpdatedAt { get; set; }
[TableColumn(TableColumnType.Deleted)]
public bool Deleted { get; set; }
}
在我的序列化响应中,例如当我检索我的所有文件夹时,我仍然会看到“IsStub”字段,即使它被标记为 [JsonIgnore]。
我正在使用 Newtonsoft.Json 进行(反)序列化,以下配置适用于所有项目并在启动时设置:
HttpConfiguration config = new HttpConfiguration();
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
如您所见,响应中没有正确显示其他 [JsonIgnore] 字段,如下所示:
{
"deleted": false,
"updatedAt": null,
"createdAt": "2018-06-03T06:13:31.66Z",
"version": "AAAAAAAACJc=",
"id": "042d81b8-4599-43ec-b462-8cbaf6ecd672",
"parentFolder": null,
"isStub": false,
"name": "Folder636636104113385950"
}
如何使 "IsStub" 字段从我的回复中消失?
我还尝试用[ScriptIgnore] 标记该字段,但没有成功。
【问题讨论】:
-
如果你不是使用json.net来序列化或反序列化,你应该添加
ScriptIgnoreAttributemsdn.microsoft.com/en-us/library/… -
IsStub属性是否也在EntityData类中定义? -
你是用json.net方法还是.net
JavaScriptSerializer序列化数据?改为检查[ScriptIgnore]属性 -
使用 Newtonsoft.Json 进行(反)序列化。
-
IsStub 不是 EntityData 的一部分
标签: c# json asp.net-mvc json-serialization