【发布时间】:2020-11-17 00:17:28
【问题描述】:
我有一个控制器,其中包含必须接收 XML 对象并反序列化它的 POST 方法。但经过我所有的尝试,我总是得到一个所有属性都设置为空值或默认值的空对象。
这是代码(对于这个堆很抱歉,但我认为错误可能出现在任何代码中。):
订单类:
[XmlRoot]
public class Order
{
[XmlElement]
public long OrderSource { get; set; }
[XmlElement]
public long Type { get; set; }
[XmlElement]
public decimal DiscountPercent { get; set; }
[XmlElement]
public string PayMethod { get; set; }
[XmlElement]
public int QtyPerson { get; set; }
[XmlElement]
public decimal ChangeAmount { get; set; }
[XmlElement]
public string Remark { get; set; }
[XmlElement]
public Customer Customer { get; set; }
[XmlElement]
public Address Address { get; set; }
[XmlElement]
public string AddressRemark { get; set; }
[XmlElement]
public Phone Phone { get; set; }
[XmlArray(nameof(Products))]
public List<Product> Products { get; set; }
客户类别:
[XmlRoot]
public class Customer
{
[XmlElement]
public string Name { get; set; }
}
地址类:
[XmlRoot]
public class Address
{
[XmlElement]
public string CityName { get; set; }
[XmlElement]
public string StreetName { get; set; }
[XmlElement]
public string House { get; set; }
[XmlElement]
public string Flat { get; set; }
[XmlElement]
public string Floor { get; set; }
[XmlElement]
public string DoorCode { get; set; }
}
还有电话类:
[XmlRoot]
public class Phone
{
[XmlElement]
public string Number { get; set; }
}
这是请求的正文:
<?xml version="1.0" encoding="UTF-8"?>
<Order>
<orderSource>0</orderSource>
<type>0</type>
<discountPercent>0</discountPercent>
<payMethod>string</payMethod>
<qtyPerson>0</qtyPerson>
<changeAmount>0</changeAmount>
<remark>string</remark>
<customer>
<name>asdasd</name>
</customer>
<address>
<cityName>string</cityName>
<streetName>string</streetName>
<house>string</house>
<flat>string</flat>
<floor>string</floor>
<doorCode>string</doorCode>
</address>
<addressRemark>string</addressRemark>
<phone>
<number>string</number>
</phone>
<products>
<name>string</name>
<code>string</code>
<qty>0</qty>
<price>0</price>
</products>
</Order>
请告诉我,我应该在这里更改什么,以便内置的反序列化器可以正确处理请求?提前致谢
【问题讨论】:
-
您的问题是您的 XML 元素的 case 与 XML 不匹配。您的属性是帕斯卡大小写,但 XML 是骆驼大小写。而且,不幸的是,XML 是区分大小写的。请参阅:Is XML case-sensitive?(答案:是)和Case insensitive XML parser in c#。
-
您需要修复属性名称或通过设置设置
XmlElementAttribute.ElementName覆盖它们,如here 所示,例如[XmlElement("orderSource")] -
@dbc 谢谢!这对我有用!您介意发布一个答案,以便我将其标记为正确答案吗?
标签: c# xml asp.net-core deserialization