SORU
27 Temmuz 2010, Salı


Nasıl json seri hale getirici döngüsel başvuru hazırda iki yönlü eşleme kaynaklanan sorunları çözmek için?

POJO seri hale getirmek için bir seri hale getirici JSON yazıyorum ama döngüsel başvuru sorunu kalmış. Hazırda bekleme çift yönlü bir-çok ilişkisi, ebeveyn referanslar çocuk ve çocuk başvurular üst sırt ve seri hale getirici ölür burada. (örnek kod aşağıda)
Nasıl bu döngüyü kırmak için? Sahibi nesne bir yerde kendi sahibi kendi hiyerarşisi içinde kendisi var olup olmadığını görmek için bir nesne ağaç alabilir miyiz? Eğer başvuru dairesel olacaksa bulmak için başka yol yok mu? ya da bu sorunu çözmek için başka bir fikir?

CEVAP
27 Temmuz 2010, Salı


Özelliğini kullanarak Google JSON sayı bu tür işlemek İçin güveniyor

Excluding Fields From Serialization and Deserialization

Aşağıdaki gibi A ve B sınıfı arasında iki yönlü bir ilişki varsayalım

public class A implements Serializable {

    private B b;

}

Ve B

public class B implements Serializable {

    private A a;

}

Şimdi şöyle (Dikkat edin . özel bir Gson nesne almak İçin GsonBuilder ^strong>setExclusionStrategiesyöntem)

Gson gson = new GsonBuilder()
    .setExclusionStrategies(new ExclusionStrategy() {

        public boolean shouldSkipClass(Class<?> clazz) {
            return (clazz == B.class);
        }

        /**
          * Custom field exclusion goes here
          */
        public boolean shouldSkipField(FieldAttributes f) {
            return false;
        }

     })
    /**
      * Use serializeNulls method if you want To serialize null values 
      * By default, Gson does not serialize null values
      */
    .serializeNulls()
    .create();

Şimdi dairesel referansımız

A a = new A();
B b = new B();

a.setB(b);
b.setA(a);

String json = gson.toJson(a);
System.out.println(json);

GsonBuilder sınıf bir göz atın

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Apple

    Apple

    22 HAZİRAN 2005
  • Barnacules Nerdgasm

    Barnacules N

    20 Temmuz 2006
  • Ralph Phillips

    Ralph Philli

    5 Aralık 2006