- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在开发一个 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/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!