@@ -780,6 +780,47 @@ class Foo:
780780 assert str (ex .value ).startswith ("Unsupported type: UnsupportedClass" )
781781
782782
783+ def test_skip_with_unsupported_types () -> None :
784+ class UnsupportedClass :
785+ """A class that is NOT decorated with @serde."""
786+
787+ def __init__ (self , value : int = 42 ) -> None :
788+ self .value = value
789+
790+ # Decoration should succeed
791+ @serde .serde
792+ class Foo :
793+ name : str
794+ internal : UnsupportedClass = serde .field (default_factory = UnsupportedClass , skip = True )
795+
796+ # Serialization should work
797+ f = Foo (name = "test" )
798+ assert serde .to_dict (f ) == {"name" : "test" }
799+
800+ # Deserialization should work, using default for skipped field
801+ restored = serde .from_dict (Foo , {"name" : "test" })
802+ assert restored .name == "test"
803+ assert isinstance (restored .internal , UnsupportedClass )
804+
805+ # Also test with List of unsupported types
806+ @serde .serde
807+ class Bar :
808+ name : str
809+ items : list [UnsupportedClass ] = serde .field (default_factory = list , skip = True )
810+
811+ b = Bar (name = "test" )
812+ b .items .append (UnsupportedClass (1 ))
813+ b .items .append (UnsupportedClass (2 ))
814+
815+ # Serialization should work even with non-empty list
816+ assert serde .to_dict (b ) == {"name" : "test" }
817+
818+ # Deserialization should work
819+ restored_bar = serde .from_dict (Bar , {"name" : "test" })
820+ assert restored_bar .name == "test"
821+ assert restored_bar .items == []
822+
823+
783824def test_dataclass_inheritance () -> None :
784825 @serde .serde
785826 class Base :
0 commit comments