2016-05-03 43 views
-1
public class Employee 
{ 
    publlic string FullName { get; set; } 
    [JsonIgnore] 
    public List<abc> Abc { get; set; } 
} 
財產

我怎麼能包括財產Abc反序列化對象時,儘管其上具有JsonIgnore包括在具有JsonIgnore

+2

我覺得這種情況下,你應該重新考慮你的設計。 – Casey

回答

3

如果序列化的數據具有Abc屬性(我認爲它的確如此,因爲您想反序列化它),那麼創建另一個沒有[JsonIgnore]屬性的類,並將JSON反序列化爲該類。

只要您使用Employee類,並且該屬性存在,序列化程序將遵守該屬性。這就是它的目的。

如果它絕對需要是Employee類,並且您不能刪除該屬性,那麼請將其反序列化爲您的「其他」類並使用它創建Employee的實例。

var employeeWithAbc = JsonConvert.DeserializeObject<EmployeeWithAbc>(json); 
var employee = new Employee { 
    FullName = employeeWithAbc.FullName, 
    Abc = employeeWithFullName.Abc } 

但也請考慮一下,你可能會看到錯誤的問題。你爲什麼在該屬性上有[JsonIgnore]

+0

喜歡部分類的權利?我已經嘗試過這種情況,但它不接受相同的財產。 – PongPagong

+0

不是分類 - 只是另一個類。只要它具有正確的屬性,序列化器就不會在意它是否是一個類或另一個類。它只是要創建一個類的實例並使用JSON中的內容填充它。如果你需要一個'Employee'的實例,那麼你可以把你反序列化的另一個類用來創建一個新的'Employee'實例。 –

+0

我添加了jsonignore,因爲我不想讓子集合對象被檢索 – PongPagong

0

按照Scott的建議,如果您的Employee類具有很多屬性,您可以創建單獨的部分類(以避免重複自己並避免您做更多的工作,而不是您需要的)。即你可以有你的基類Employee如下:

public class Employee 
{ 
    public string name 
    { 
     get; 
     set; 
    } 
} 

然後,你可以通過創建一個派生類的Employee創建其他特定串行化處理/ deserialise類然後將繼承屬性/的Employee屬性:

public class ParseEmployee : Employee 
{ 
    public public List<abc> Abc 
    { 
     get; 
     set; 
    } 
} 
+0

我明白你的觀點和alex,但是尋找更優雅的方式...... – PongPagong