@@ -200,7 +200,7 @@ class PrimitiveTypeSerializerFactory:
200200
201201 class TextSerializer (Serializer ):
202202 def serialize (
203- self , element : etree .Element , value : Any , * , encoder : XmlEncoder , skip_empty : bool = False ,
203+ self , element : etree .Element , value : Any , * , encoder : XmlEncoder , skip_empty : bool = False ,
204204 ) -> Optional [etree .Element ]:
205205 if value is None and skip_empty :
206206 return element
@@ -210,14 +210,14 @@ def serialize(
210210 return element
211211
212212 def deserialize (self , element : etree .Element ) -> Optional [str ]:
213- return element .text
213+ return element .text or None
214214
215215 class AttributeSerializer (Serializer ):
216216 def __init__ (
217217 self , model : Type ['pxml.BaseXmlModel' ], model_field : pd .fields .ModelField , ctx : Serializer .Context ,
218218 ):
219219 ns_attrs = model .__xml_ns_attrs__
220- name = ctx .entity_name or model_field .name
220+ name = ctx .entity_name or model_field .alias
221221 ns = ctx .entity_ns or (ctx .parent_ns if ns_attrs else None )
222222 nsmap = ctx .parent_nsmap
223223
@@ -239,7 +239,7 @@ def deserialize(self, element: etree.Element) -> Optional[str]:
239239
240240 class ElementSerializer (Serializer ):
241241 def __init__ (self , model_field : pd .fields .ModelField , ctx : Serializer .Context ):
242- name = ctx .entity_name or model_field .name
242+ name = ctx .entity_name or model_field .alias
243243 ns = ctx .entity_ns or ctx .parent_ns
244244 nsmap = merge_nsmaps (ctx .entity_nsmap , ctx .parent_nsmap )
245245 self .element_name = QName .from_alias (tag = name , ns = ns , nsmap = nsmap ).uri
@@ -252,9 +252,7 @@ def serialize(
252252
253253 encoded = encoder .encode (value )
254254
255- if (sub_element := element .find (self .element_name )) is None :
256- sub_element = etree .SubElement (element , self .element_name )
257-
255+ sub_element = find_element_or_create (element , self .element_name )
258256 sub_element .text = encoded
259257 return sub_element
260258
@@ -304,7 +302,7 @@ def __init__(
304302 self .is_root = is_root
305303 self .element_name = QName .from_alias (tag = name , ns = ns , nsmap = nsmap ).uri
306304 self .field_serializers = {
307- field_name : self .build_field_serializer (model , model_subfield , ctx )
305+ model_subfield . alias : self .build_field_serializer (model , model_subfield , ctx )
308306 for field_name , model_subfield in model .__fields__ .items ()
309307 }
310308
@@ -324,8 +322,9 @@ def serialize(
324322
325323 def deserialize (self , element : etree .Element ) -> Any :
326324 result = {
327- field_name : field_serializer . deserialize ( element )
325+ field_name : field_value
328326 for field_name , field_serializer in self .field_serializers .items ()
327+ if (field_value := field_serializer .deserialize (element )) is not None
329328 }
330329 if self .is_root :
331330 return result ['__root__' ]
@@ -340,7 +339,7 @@ def __init__(
340339 model : Type ['pxml.BaseXmlModel' ],
341340 ctx : Serializer .Context ,
342341 ):
343- field_name = model_field .name if model_field else None
342+ field_name = model_field .alias if model_field else None
344343 name = ctx .entity_name or model .__xml_tag__ or field_name or model .__name__
345344 ns = ctx .entity_ns or model .__xml_ns__
346345 nsmap = merge_nsmaps (ctx .entity_nsmap , model .__xml_nsmap__ , ctx .parent_nsmap )
@@ -433,7 +432,7 @@ class BaseSerializer(Serializer, abc.ABC):
433432 def __init__ (
434433 self , model : Type ['pxml.BaseXmlModel' ], model_field : pd .fields .ModelField , ctx : Serializer .Context ,
435434 ):
436- name = ctx .entity_name or model_field .name
435+ name = ctx .entity_name or model_field .alias
437436
438437 self .parent_ns = ns = ctx .entity_ns or ctx .parent_ns
439438 self .parent_nsmap = nsmap = merge_nsmaps (ctx .entity_nsmap , ctx .parent_nsmap )
@@ -551,14 +550,14 @@ def __init__(
551550 ):
552551 assert model_field .sub_fields is not None , "unexpected model field"
553552
554- name = ctx .entity_name or model_field .name
553+ name = ctx .entity_name or model_field .alias
555554 ns = ctx .entity_ns or ctx .parent_ns
556555 nsmap = merge_nsmaps (ctx .entity_nsmap , ctx .parent_nsmap )
557556
558557 self .element_name = QName .from_alias (tag = name , ns = ns , nsmap = nsmap ).uri
559558
560559 item_field = deepcopy (model_field .sub_fields [0 ])
561- item_field .name = model_field .name
560+ item_field .name = model_field .alias
562561 self .serializer = self .build_field_serializer (
563562 model ,
564563 item_field ,
@@ -640,7 +639,7 @@ def __init__(
640639 ):
641640 assert model_field .sub_fields is not None , "unexpected model field"
642641
643- name = ctx .entity_name or model_field .name
642+ name = ctx .entity_name or model_field .alias
644643 ns = ctx .entity_ns or ctx .parent_ns
645644 nsmap = merge_nsmaps (ctx .entity_nsmap , ctx .parent_nsmap )
646645
@@ -649,7 +648,7 @@ def __init__(
649648 self .serializers = []
650649 for sub_field in model_field .sub_fields :
651650 sub_field = deepcopy (sub_field )
652- sub_field .name = model_field .name
651+ sub_field .name = model_field .alias
653652
654653 self .serializers .append (
655654 self .build_field_serializer (
0 commit comments