2017-06-19 457 views
0

我有一个字段,它是一对多关系中多方的外键(例如Order - >LineItem)。我希望实体框架将该字段标记为非null,并添加“关于删除,级联”关系,因此我使用[Required]属性对其进行了修饰。但是,我不想让Newtonsoft.JSON对该字段进行序列化或反序列化,因此我使用[JsonIgnore]属性对其进行了修饰。但是,看起来[Required]属性胜过[JsonIgnore],因为我得到一个错误,指出该字段是必需的。有什么办法可以使这项工作?Newtonsoft.JSON忽略[必填]属性

public class LineItem 
{ 
    [JsonIgnore] 
    [Required] 
    public int OrderId { get; set; } 
} 
+1

显示在您获得异常,请 – Steve

+2

什么是你所得到的确切的错误代码?据我所知,Json.Net根本不查找“[Required]”属性。它有自己的机制来制作所需的领域,例如'[JsonProperty(Required = Required.Always)]'。 –

+0

我怀疑JSON.NET与你得到的错误有什么关系。很可能,对象正在被反序列化,但是您使用的框架(Web API?MVC?)会阻止请求,因为它认为它所采用的参数是无效的。如果您需要'OrderId'来* *不是必需的,那么请不要使用'LineItem'类。根据您的具体需求,您可以创建一个单独的模型,其中不需要OrderId或完全不存在。 – StriplingWarrior

回答

1

我不得不把这个作为一个答案,但下面的代码工作:

using Newtonsoft.Json; 
using Newtonsoft.Json.Linq; 
using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApp2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      LineItem item = new LineItem 
      { 
       OrderId = 10 
      }; 


      string json = JsonConvert.SerializeObject(item, Formatting.Indented); 
      var t = JsonConvert.DeserializeObject<LineItem>(json); 
     } 
     public class LineItem 
     { 
      [JsonIgnore] 
      [Required] 
      public int OrderId { get; set; } 
     } 
    } 
}