diff --git a/xmlity-quick-xml/tests/features.rs b/xmlity-quick-xml/tests/features.rs
index 69cd023..6e0c9d8 100644
--- a/xmlity-quick-xml/tests/features.rs
+++ b/xmlity-quick-xml/tests/features.rs
@@ -3,4 +3,5 @@ pub mod groups;
pub mod other;
pub mod text;
pub mod utils;
+pub mod value;
pub mod with;
diff --git a/xmlity-quick-xml/tests/value/indirect_direct_equal.rs b/xmlity-quick-xml/tests/value/indirect_direct_equal.rs
new file mode 100644
index 0000000..ad1c470
--- /dev/null
+++ b/xmlity-quick-xml/tests/value/indirect_direct_equal.rs
@@ -0,0 +1,34 @@
+pub mod linkbase_ref_items {
+ #[derive(
+ Debug, ::xmlity::SerializationGroup, ::xmlity::DeserializationGroup, PartialEq, Clone,
+ )]
+ pub struct LinkbaseRef {}
+}
+#[derive(Debug, ::xmlity::Serialize, ::xmlity::Deserialize, PartialEq, Clone)]
+pub enum LinkbaseRef {
+ #[xelement(
+ name = "linkbaseRef",
+ namespace = "http://www.xbrl.org/2003/linkbase",
+ allow_unknown_attributes = "any"
+ )]
+ LinkbaseRef(#[xgroup] linkbase_ref_items::LinkbaseRef),
+}
+
+const LINKBASE_REF: &str = r###"
+
+"###;
+
+#[test]
+fn linkbase_ref() {
+ let direct: LinkbaseRef =
+ xmlity_quick_xml::from_str(LINKBASE_REF.trim()).expect("Failed to parse linkbaseRef XML");
+
+ let element: xmlity::value::XmlValue =
+ xmlity_quick_xml::from_str(LINKBASE_REF.trim()).expect("Failed to parse linkbaseRef XML");
+
+ let indirect: LinkbaseRef =
+ xmlity::Deserialize::deserialize(&element).expect("Failed to deserialize linkbaseRef XML");
+
+ assert_eq!(direct, indirect);
+}
diff --git a/xmlity-quick-xml/tests/value/mod.rs b/xmlity-quick-xml/tests/value/mod.rs
new file mode 100644
index 0000000..522caa9
--- /dev/null
+++ b/xmlity-quick-xml/tests/value/mod.rs
@@ -0,0 +1 @@
+pub mod indirect_direct_equal;
diff --git a/xmlity/src/types/common.rs b/xmlity/src/types/common.rs
index f62c94d..ad9636b 100644
--- a/xmlity/src/types/common.rs
+++ b/xmlity/src/types/common.rs
@@ -159,6 +159,56 @@ impl SerializationGroup for Option {
}
}
+impl<'de, D> de::SeqAccess<'de> for Option<&'de D>
+where
+ &'de D: de::Deserializer<'de>,
+{
+ type Error = <&'de D as de::Deserializer<'de>>::Error;
+
+ type SubAccess<'g>
+ = Self
+ where
+ Self: 'g;
+
+ fn next_element(&mut self) -> Result