gpt4 book ai didi

.net - REST API 仅设置对象的某些属性

转载 作者:数据小太阳 更新时间:2023-10-29 02:11:20 26 4
gpt4 key购买 nike

我正在开发一个 REST API,我将其发布到使用 POST 和 XML 作为内容。在我的 WebInvoke 方法中,它似乎只序列化了一些属性。例如,我传递了 FirstName、LastName、Email、Phone 和 Address,但它没有设置 Email 和 Address 属性。因此,当它将数据添加到我的数据库时,这些字段是空白的。

这是为什么?为什么它设置了一些属性而不设置其他属性?我试过重新安排订单,但没有任何影响。这也让我想到了另一个问题:是否必须在 xml 中传递所有属性,或者只传递一些像我这里的属性就足够了?我希望答案是它不需要全部,因为这可能是一个非常动态的系统,并且可以在不更改 xml 的情况下频繁添加新属性。

这里是一些相关的代码:

public class Lead
{
#region Public Properties
[DataMember(Name = "LeadId")]
public int LeadId { get; set; }
[DataMember(Name="FirstName")]
public string FirstName { get; set; }
[DataMember(Name = "MiddleName")]
public string MiddleName { get; set; }
[DataMember(Name = "LastName")]
public string LastName { get; set; }
[DataMember(Name = "Email")]
public string Email { get; set; }
[DataMember(Name = "Email2")]
public string Email2 { get; set; }
[DataMember(Name = "Phone")]
public string Phone { get; set; }
[DataMember(Name = "Phone2")]
public string Phone2 { get; set; }
[DataMember(Name = "Address")]
public string Address { get; set; }
[DataMember(Name = "Address2")]
public string Address2 { get; set; }
[DataMember(Name = "Address3")]
public string Address3 { get; set; }
[DataMember(Name = "City")]
public string City { get; set; }
[DataMember(Name = "State")]
public string State { get; set; }
[DataMember(Name = "Zip")] etc...

这是操作合约

[OperationContract]
[WebInvoke(Method = "POST",
UriTemplate = "leads",
BodyStyle= WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Xml,
ResponseFormat = WebMessageFormat.Xml)]
string AddLead(Lead lead);

这是服务中的 AddLead 函数:

public string AddLead(Lead lead)
{
string result = lead.Submit();
if (result == "Success")
{
return "Success. " + lead.LeadId;
}
else
{
return result;
}
}

这是我传递的 XML:

<?xml version="1.0" encoding="utf-8"?>
<Lead xmlns="http://www.myrenamednamespace.com/leads">
<FirstName>John</FirstName>
<LastName>Doe</LastName>
<Email>JohnDoe@gmail.com</Email>
<Phone>8885551234</Phone>
<Address>123 Fake St</Address>
<City>Fake City</City>
</Lead>

最佳答案

您需要在 DataMember 上指定顺序。 DataContractSerializer 假定按字母顺序排列,除非您另有说明,并且它会忽略它发现的不符合预期顺序的项目(这就是它打电话但不成功发送电子邮件的原因)

public class Lead
{
[DataMember(Name = "LeadId", Order=1)]
public int LeadId { get; set; }

[DataMember(Name = "FirstName", Order = 2)]
public string FirstName { get; set; }

[DataMember(Name = "MiddleName", Order = 3)]
public string MiddleName { get; set; }

// ... etc
}

关于.net - REST API 仅设置对象的某些属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8922698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com