C# DataMember Name属性在实体框架中不起作用
我喜欢这样:C# DataMember Name属性在实体框架中不起作用,c#,serialization,entity-framework-6,C#,Serialization,Entity Framework 6,我喜欢这样: public class OptimizationNodeDto : IModelWithId { public int Id { get; set; } [DataMember(Name = "parentId")] public int? ParentOptimizationNodeId { get; set; } [DataMember(Name = "name")]
public class OptimizationNodeDto : IModelWithId
{
public int Id { get; set; }
[DataMember(Name = "parentId")]
public int? ParentOptimizationNodeId { get; set; }
[DataMember(Name = "name")]
public string Text { get; set; }
[DataMember(Name = "opened")]
public bool IsOpened { get; set; }
[DataMember(Name = "selected")]
public SelectedStates SelectedState { get; set; }
public List<OptimizationNodeDto> Children { get; set; }
}
public类优化nodedto:IModelWithId
{
公共int Id{get;set;}
[DataMember(Name=“parentId”)]
public int?ParentOptimizationNodeId{get;set;}
[数据成员(Name=“Name”)]
公共字符串文本{get;set;}
[DataMember(Name=“opened”)]
公共布尔值为{get;set;}
[DataMember(Name=“selected”)]
public SelectedStates SelectedState{get;set;}
公共列表子项{get;set;}
}
我希望当我用任何API发送这个对象时,它应该以JSON的形式给出属性名,就像DataMember中提到的那样,但事实并非如此。对于ex.ParentOptimizationNodeId应作为JSON结果中的parentId。
我在这里发送Dto:
[Route("{roleId}/Optimizations")]
[HttpPost]
public IHttpActionResult GetOptimizationList([FromUri]int roleId, [FromBody] FilterDto filter)
{
try
{
var groupManBo = _serviceLocator.Resolve<IRoleManagerBo>();
return Ok(groupManBo.GetOptimization(roleId, this.ViewboxUser, filter));
}
catch (Exception ex)
{
return this.HandleError(ex);
}
}
[路由({roleId}/优化”)]
[HttpPost]
公共IHttpActionResult GetOptimizationList([FromUri]int roleId,[FromBody]FilterDto filter)
{
尝试
{
var groupManBo=_serviceLocator.Resolve();
返回Ok(groupManBo.GetOptimization(roleId,this.ViewboxUser,filter));
}
捕获(例外情况除外)
{
返回此。HandleError(ex);
}
}
请参见
但是,这将假定您使用Newtonsoft作为JSON序列化程序。如果将其替换为其他序列化程序,则必须使用该序列化程序的特定属性。请参阅
但是,这将假定您使用Newtonsoft作为JSON序列化程序。如果将其替换为其他序列化程序,则必须使用该序列化程序的特定属性。将被两者忽略,除非也应用于类型本身。从:
将DataMemberAttribute属性与DataContractAttribute一起应用,以标识属于数据协定一部分的类型的成员
因此,您的DTO必须如下所示:
[DataContract]
public class OptimizationNodeDto : IModelWithId
{
[DataMember]
public int Id { get; set; }
[DataMember(Name = "parentId")]
public int? ParentOptimizationNodeId { get; set; }
[DataMember(Name = "name")]
public string Text { get; set; }
[DataMember(Name = "opened")]
public bool IsOpened { get; set; }
[DataMember(Name = "selected")]
public SelectedStates SelectedState { get; set; }
[DataMember]
public List<OptimizationNodeDto> Children { get; set; }
}
[DataContract]
公共类优化nodedto:IModelWithId
{
[数据成员]
公共int Id{get;set;}
[DataMember(Name=“parentId”)]
public int?ParentOptimizationNodeId{get;set;}
[数据成员(Name=“Name”)]
公共字符串文本{get;set;}
[DataMember(Name=“opened”)]
公共布尔值为{get;set;}
[DataMember(Name=“selected”)]
public SelectedStates SelectedState{get;set;}
[数据成员]
公共列表子项{get;set;}
}
请注意,数据协定序列化是如此,因此您现在还必须使用[DataMember]
标记Id
和Children
,这两种方法都会忽略,除非也应用于类型本身。从:
将DataMemberAttribute属性与DataContractAttribute一起应用,以标识属于数据协定一部分的类型的成员
因此,您的DTO必须如下所示:
[DataContract]
public class OptimizationNodeDto : IModelWithId
{
[DataMember]
public int Id { get; set; }
[DataMember(Name = "parentId")]
public int? ParentOptimizationNodeId { get; set; }
[DataMember(Name = "name")]
public string Text { get; set; }
[DataMember(Name = "opened")]
public bool IsOpened { get; set; }
[DataMember(Name = "selected")]
public SelectedStates SelectedState { get; set; }
[DataMember]
public List<OptimizationNodeDto> Children { get; set; }
}
[DataContract]
公共类优化nodedto:IModelWithId
{
[数据成员]
公共int Id{get;set;}
[DataMember(Name=“parentId”)]
public int?ParentOptimizationNodeId{get;set;}
[数据成员(Name=“Name”)]
公共字符串文本{get;set;}
[DataMember(Name=“opened”)]
公共布尔值为{get;set;}
[DataMember(Name=“selected”)]
public SelectedStates SelectedState{get;set;}
[数据成员]
公共列表子项{get;set;}
}
请注意,数据协定序列化是如此,因此您现在还必须使用
[DataMember]
标记Id
和子项
,您使用的是什么Json序列化程序?我是Json序列化程序的新手。请您建议操作步骤。嗯,那么,您发送此DTO的代码在哪里?我更新了我的问题。好吧,所以我认为[DataMember]
不是重命名JSON密钥的正确属性,我认为[JsonProperty(PropertyName=”“)]
是您想要的。您使用的是什么JSON serialiser?我是JSON serialiser的新手。请您建议操作步骤。嗯,那么您发送此DTO的代码在哪里?我更新了我的问题。好吧,我认为[DataMember]
不是重命名JSON键的正确属性,我认为[JsonProperty(PropertyName=”“)]
是您想要的属性。