2011-12-06 33 views
5

Tôi đã tìm thấy nhiều bài viết về tham chiếu vòng tròn với Gson, nhưng tôi không thể tìm thấy một giải pháp thanh lịch.Có giải pháp nào về tham chiếu vòng tròn Gson không?

Như tôi biết, một số giải pháp là:

  • Thiết lập thuộc tính gây ra tham chiếu vòng tròn là "thoáng qua".
  • loại trừ thuộc tính bằng một số chú thích.

Nhưng như một câu hỏi chung, có một số chiến lược chung để giải quyết vấn đề không?

+2

Một trò chơi kỳ lạ, cách duy nhất để thắng là không được chơi. Phân vùng lại để bạn không có tham chiếu vòng tròn. – DwB

+0

Là mối quan tâm chỉ với serialization, hoặc là nó cũng với việc thiết lập các liên kết chính xác trong deserialization? –

+0

Có! Hãy xem bài này bao gồm một [GraphAdapterBuilder dụ] [1] [1]: http://stackoverflow.com/questions/10036958/the-easiest-way-to- loại bỏ các mối quan hệ-đệ quy-hai chiều – ouba64

Trả lời

2

Theo như tôi biết không có giải pháp tự động nào cho tham chiếu vòng tròn trong Gson. Thư viện tạo JSON duy nhất mà tôi biết có thể xử lý tham chiếu vòng tròn tự động là XStream (với phần phụ trợ Jettison).

CHỈNH SỬA: Jackson cũng hỗ trợ xử lý tham chiếu vòng tròn với chú thích @JsonIdentityInfo; vì vậy trong khi không tự động (bạn cần đánh dấu các tham chiếu cần xử lý đối tượng Id), nó cho phép giải quyết hầu hết các trường hợp.

+1

Đúng, Gson không có giải pháp tự động cho tham chiếu vòng tròn, cũng không cung cấp giải pháp tuần tự hóa khác ngoài việc đánh dấu Java các trường được bỏ qua và/hoặc viết mã tuần tự tùy chỉnh. Ngoài ra, Jackson cung cấp một giải pháp dựa trên chú giải cho các mối quan tâm tuần tự hóa và deserialization. Xem điểm số 7 tại http://www.cowtowncoder.com/blog/archives/2010/11/entry_434.html –

+0

Cảm ơn, tôi đã giải quyết vấn đề bằng cách loại trừ các trường gián tiếp. Và tôi sẽ học XStream khi rảnh rỗi. –

+0

Cộng một cho XStream. Các giải pháp khả thi duy nhất tôi đã tìm thấy rằng dường như làm việc. –

-4

Như tôi biết, phiên bản Gson mới nhất đã giải quyết được thiệt hại cơ học.

+0

vừa thử với phiên bản mới nhất (2.3.1) và vẫn còn ở đó – DaveB

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