2009-09-11 36 views
77

Tôi có một lớp POCO đang được gửi tới trình duyệt dưới dạng chuỗi JSON trong .NET 3.5 sp1. Tôi chỉ sử dụng serialization mặc định JSON và tôi có một số lĩnh vực mà tôi muốn bỏ qua. Tôi muốn đặt một thuộc tính tương tự như [System.Xml.Serialization.XmlIgnore] vào chúng để chúng không được tuần tự hóa.Bỏ qua một trường trong quá trình tuần tự hóa JSON JSON; tương tự như [XmlIgnore]?

Trả lời

117

tôi sử dụng thuộc tính ScriptIgnore trên mô hình của tôi như vậy:

public class Item 
{ 
    [ScriptIgnore] 
    public Item ParentItem { get; set; } 
} 

Trong tình huống đặc biệt này, tôi đã nhận được một lỗi tham chiếu vòng tròn từ serializer Json, vì vậy tôi chỉ đơn giản là bỏ qua nó. Tôi là asking a similar question here on SO khi tôi được bật sự khác biệt giữa Mô hình và ViewModel.

+1

nếu POCO của nó không phải là một EntityModel được tạo ra, tôi không muốn chỉnh sửa mã được tạo ra, có cách giải quyết nào đó để thêm thuộc tính ScriptIgnore vào mô hình thực thể được tạo ra hay không. – hazimdikenli

+0

@hazimdikenli bạn có thể phải sử dụng một phần lớp cho việc này. –

+11

Đừng quên thêm tham chiếu vào "System.Web.Extensions" để làm việc này – Levitikon

26
[ScriptIgnore] 

là huckaberry của bạn.

+4

+1 để tham khảo Tombstone. – jrummell

+1

Nó thực sự là "Huckle Bearer", nhưng tôi sẽ cung cấp cho bạn một +1 cho nỗ lực và bộ phim. :) –

+8

Câu trả lời ban đầu là chính xác, anh ta nói "huckleberry", không phải là "người giấu giếm". http://www.imsdb.com/scripts/Tombstone.html – heisenberg

2

Bạn chỉ cần thêm [ScriptIgnore(ApplyToOverrides = true)] vào tệp mẫu văn bản (.tt) của mình.

Dưới đây là một phần của mẫu văn bản của tôi trước khi

#> 
<#=codeStringGenerator.NavigationProperty(navigationProperty)#> 
<# 

Khi tôi chèn mã dòng phía trên codeStringGenerator lớp tự động của tôi tạo ra và nhìn như thế này:

[ScriptIgnore(ApplyToOverrides = true)] 
public virtual ICollection<Currency> Currencies { get; set; } 

Tôi cũng cần thiết để sửa đổi chức năng UsingDirectives để chèn "using System.Web.Script.Serialization;"

+0

'ApplyToOverrides' có vẻ rất quan trọng đối với thuộc tính ảo – Todd

1

Đặt thuộc tính làm nội bộ. Tùy thuộc vào cấu trúc của bạn, mặc dù. Hãy xem xét.

Các vấn đề liên quan