@@ -158,6 +158,8 @@ def serialize(
158158 encoded : Dict [str , Any ],
159159 * ,
160160 skip_empty : bool = False ,
161+ exclude_none : bool = False ,
162+ exclude_unset : bool = False ,
161163 ) -> Optional [XmlElementWriter ]:
162164 if value is None :
163165 return None
@@ -166,10 +168,17 @@ def serialize(
166168 skip_empty = self ._model .__xml_skip_empty__
167169
168170 for field_name , field_serializer in self ._field_serializers .items ():
169- if field_name not in self ._fields_serialization_exclude :
170- field_serializer .serialize (
171- element , getattr (value , field_name ), encoded [field_name ], skip_empty = skip_empty ,
172- )
171+ if field_name in self ._fields_serialization_exclude :
172+ continue
173+ if exclude_unset and field_name not in value .__pydantic_fields_set__ :
174+ continue
175+
176+ field_serializer .serialize (
177+ element , getattr (value , field_name ), encoded [field_name ],
178+ skip_empty = skip_empty ,
179+ exclude_none = exclude_none ,
180+ exclude_unset = exclude_unset ,
181+ )
173182
174183 return element
175184
@@ -269,14 +278,24 @@ def serialize(
269278 encoded : Dict [str , Any ],
270279 * ,
271280 skip_empty : bool = False ,
281+ exclude_none : bool = False ,
282+ exclude_unset : bool = False ,
272283 ) -> Optional [XmlElementWriter ]:
273284 if value is None :
274285 return None
275286
287+ if exclude_unset and 'root' not in value .__pydantic_fields_set__ :
288+ return None
289+
276290 if self ._model .__xml_skip_empty__ is not None :
277291 skip_empty = self ._model .__xml_skip_empty__
278292
279- self ._root_serializer .serialize (element , getattr (value , 'root' ), encoded , skip_empty = skip_empty )
293+ self ._root_serializer .serialize (
294+ element , getattr (value , 'root' ), encoded ,
295+ skip_empty = skip_empty ,
296+ exclude_none = exclude_none ,
297+ exclude_unset = exclude_unset ,
298+ )
280299
281300 return element
282301
@@ -362,9 +381,14 @@ def serialize(
362381 encoded : Dict [str , Any ],
363382 * ,
364383 skip_empty : bool = False ,
384+ exclude_none : bool = False ,
385+ exclude_unset : bool = False ,
365386 ) -> Optional [XmlElementWriter ]:
366387 assert self ._model .__xml_serializer__ is not None , f"model { self ._model .__name__ } is partially initialized"
367388
389+ if exclude_none and value is None :
390+ return None
391+
368392 if self ._nillable and value is None :
369393 sub_element = element .make_element (self ._element_name , nsmap = self ._nsmap )
370394 make_element_nill (sub_element )
@@ -375,7 +399,9 @@ def serialize(
375399 return None
376400
377401 sub_element = element .make_element (self ._element_name , nsmap = self ._nsmap )
378- self ._model .__xml_serializer__ .serialize (sub_element , value , encoded , skip_empty = skip_empty )
402+ self ._model .__xml_serializer__ .serialize (
403+ sub_element , value , encoded , skip_empty = skip_empty , exclude_none = exclude_none , exclude_unset = exclude_unset ,
404+ )
379405 if skip_empty and sub_element .is_empty ():
380406 return None
381407 else :
0 commit comments