C# 在Web API请求处理期间,是否有与JsonSerializerSettings.MissingMemberHandling等效的XML序列化方法?

C# 在Web API请求处理期间,是否有与JsonSerializerSettings.MissingMemberHandling等效的XML序列化方法?,c#,asp.net-web-api,xml-deserialization,json-deserialization,C#,Asp.net Web Api,Xml Deserialization,Json Deserialization,我正在开发一个ASP.NET Web API,它允许其资源使用XML和JSON格式。我的一个Web API服务的资源模型类型具有用户不会发送的属性。但我必须将其设置为我发回的响应 例如,有一个POST请求,其中用户希望将新项目保存到数据库中。我的服务使用相同的资源模型和一个额外的属性进行响应,表明它已保存 我已将此附加属性添加到我的资源模型中。当我在Fiddler中测试它时,它传递了一个XML请求,它用一个HTTP400抱怨说新属性丢失了。对于JSON输入,它工作正常,这可能是由于默认的JSON

我正在开发一个ASP.NET Web API,它允许其资源使用XML和JSON格式。我的一个Web API服务的资源模型类型具有用户不会发送的属性。但我必须将其设置为我发回的响应

例如,有一个POST请求,其中用户希望将新项目保存到数据库中。我的服务使用相同的资源模型和一个额外的属性进行响应,表明它已保存

我已将此附加属性添加到我的资源模型中。当我在Fiddler中测试它时,它传递了一个XML请求,它用一个
HTTP400
抱怨说新属性丢失了。对于JSON输入,它工作正常,这可能是由于默认的JSON设置
JsonSerializerSettings.MissingMemberHandling

对于XML反序列化,我们是否有与此等效的属性

输入XML示例:

<MyResource>
    <Property1>ABC</Property1>
    <Property2>DEF</Property2>
</MyResource>
我的资源模型如下所示:

The property Id was missing
public string Property1 { get; set; }
public string Property2 { get; set; }
public int Id { get; set; }
Microsoft的“”页对XML序列化有如下说明(在XML序列化标题下):

如果需要对序列化进行更多控制,可以使用DataContract属性来修饰类。当存在此属性时,将按如下方式序列化该类:

  • “选择加入”方法:默认情况下,属性和字段不会序列化。要序列化属性或字段,请使用DataMember属性对其进行修饰
DataMember属性具有以下特性:

需要
获取或设置一个值,该值指示序列化引擎在读取或反序列化时必须存在该成员

因此,从文档中可以看出,用
[DataMember(IsRequired=false)]
装饰Id属性将允许XML序列化程序保持其默认值


不过,请注意,默认值为0,因此需要显式检查该值作为“无值”标记。如果您想在逻辑上区分ID为0的实体和没有ID的实体,请考虑将其类型更改为<代码> int >代码>,因此默认值将是“代码> null < /代码>。仍然得到相同的错误。试图深入研究我的媒体类型格式化程序设置,看看是否需要调整其中的某些内容。
public string Property1 { get; set; }
public string Property2 { get; set; }
public int Id { get; set; }