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=”“)]
是您想要的属性。