2017-06-19 170 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; } 
     } 
    } 
}