XML序列化包含循環引用的解決方法以及.net和Java值/引用傳遞的區別

在實例轉換爲XML的過程中,如果實例存在循環引用的結構,則在轉換爲XML的過程中會拋異常:

序列化類型 xxxxx 的對象時檢測到循環引用

解決方法是,在循環引用的字段前面加上一段修飾語句

[System.Xml.Serialization.XmlIgnore]

這樣在序列化的時候,系統會自動忽略該字段實例的序列化

.net與Java最大的不同在於,XML結構的字段是值傳遞,而.net是引用傳遞

例如一段JAVA代碼

class A
{
    public int field1;
    public String field2;
    public A parent;
}
//JAVA值傳遞例子
void test1()
{
    A a = new A();
    a.field1 = 1;
    a.field2 = "21";
    a.parent = a;
}

此時 a的結構不是循環結構·

a={field1 = 1, field2 = "21" parent = { field1 = 1, field2 = "21" parent  = null} }

class A
{
    private int field1;
    public void setField1(int _field1){
        field1 = _field1;
    }

    private String field2;

    public void setField2(String _field2){
        field2 = _field2;
    }

    private A parent;

    public void setParent(A _a){
        parent= _a;
    }
    
}
//JAVA引用傳遞例子
void test1()
{
    A a = new A();
    a.setField1(1);
    a.setField2("21");
    a.setParent(a);
}

此時 a的結構是循環結構·

a={field1 = 1, field2 = "21" parent = { field1 = 1, field2 = "21" parent  = a} }

對於.net

class A
{
    public int field1;
    public String field2;
    public A parent;
}
//.net引用傳遞例子
void test1()
{
    A a = new A();
    a.field1 = 1;
    a.field2 = "21";
    a.parent = a;
}

此時 a的結構是循環結構·

a={field1 = 1, field2 = "21" parent = { field1 = 1, field2 = "21" parent  = a} }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章