【发布时间】:2017-07-05 05:35:10
【问题描述】:
我在一些需要反序列化的 XML 中有以下元素:
<settlementLineItem number="1">
<amountPaid>38250.89</amountPaid>
<originalAmount>42501.00</originalAmount>
<adjustmentAndDiscount>
<amount>850.02</amount>
<adjustmentReason>
<messageReason>XG 2.000 % Distribution Allow.</messageReason>
<sourceCode>TNT</sourceCode>
</adjustmentReason>
<alternateAdjustmentReference>
<alternateAdjustmentReferenceType>DOC_NO</alternateAdjustmentReferenceType>
<identification>2200527269</identification>
</alternateAdjustmentReference>
</adjustmentAndDiscount>
<adjustmentAndDiscount>
<amount>2125.05</amount>
<adjustmentReason>
<messageReason>XI 5.000 % Incentive Discount</messageReason>
<sourceCode>TNT</sourceCode>
</adjustmentReason>
<alternateAdjustmentReference>
<alternateAdjustmentReferenceType>DOC_NO</alternateAdjustmentReferenceType>
<identification>2200528098</identification>
</alternateAdjustmentReference>
</adjustmentAndDiscount>
<adjustmentAndDiscount>
<amount>1062.53</amount>
<adjustmentReason>
<messageReason>XF 2.500 % Advertising Allow.</messageReason>
<sourceCode>TNT</sourceCode>
</adjustmentReason>
<alternateAdjustmentReference>
<alternateAdjustmentReferenceType>DOC_NO</alternateAdjustmentReferenceType>
<identification>2200529157</identification>
</alternateAdjustmentReference>
</adjustmentAndDiscount>
<adjustmentAndDiscount>
<amount>212.51</amount>
<adjustmentReason>
<messageReason>XO 0.500 % Training & Dev. Cost</messageReason>
<sourceCode>TNT</sourceCode>
</adjustmentReason>
<alternateAdjustmentReference>
<alternateAdjustmentReferenceType>DOC_NO</alternateAdjustmentReferenceType>
<identification>2200529467</identification>
</alternateAdjustmentReference>
</adjustmentAndDiscount>
<invoice creationDateTime="2017-06-28">
<uniqueCreatorIdentification>4912115908</uniqueCreatorIdentification>
<contentOwner>
<gln>6001000000001</gln>
</contentOwner>
<invoiceType>CREDIT_NOTE </invoiceType>
</invoice>
<settlementEntity entityType="SITE">
<partyIdentification>
<gln>6001007031336</gln>
</partyIdentification>
</settlementEntity>
</settlementLineItem>
我正在使用这个类来表示那个特定的元素:
[XmlRoot(ElementName = "settlementLineItem")]
public class SettlementLineItem
{
[XmlAttribute(AttributeName = "number")]
public string Number { get; set; }
// Standard data
[XmlElement(ElementName = "amountPaid")]
public string AmountPaid { get; set; }
[XmlElement(ElementName = "originalAmount")]
public string OriginalAmount { get; set; }
[XmlElement(ElementName = "invoice")]
public Invoice Invoice { get; set; }
[XmlElement(ElementName = "settlementEntity")]
public SettlementEntity SettlementEntity { get; set; }
[XmlElement(ElementName = "adjustmentAndDiscount")]
public List<AdjustmentAndDiscount> AdjustmentAndDiscount { get; set; }
// Exetension data
[XmlElement(ElementName = "documentType")]
public string DocumentType { get; set; }
[XmlElement(ElementName = "documentNumber")]
public string DocumentNumber { get; set; }
[XmlElement(ElementName = "itemText")]
public string ItemText { get; set; }
}
执行反序列化的代码:
private Message DeserializeXml(string xml)
{
var serializer = new XmlSerializer(typeof(Message));
using (var reader = new StringReader(xml))
{
return (Message)serializer.Deserialize(reader);
}
}
所有元素都可以反序列化,没有任何问题,但Number 属性始终为null。
我正在尝试反序列化的文档中的所有属性都出现此问题。
有人知道为什么会这样吗?
请注意,我没有包含整个 xml 消息(它很大,类型为 Message),但这应该是足够的信息,因为反序列化本身是成功的(只是在属性方面没有)。
谢谢!
编辑
Invoice、SettlementEntity、AdjustmentAndDiscount 的代码
[XmlRoot(ElementName = "invoice")]
public class Invoice
{
[XmlElement(ElementName = "uniqueCreatorIdentification")]
public string UniqueCreatorIdentification { get; set; }
[XmlElement(ElementName = "contentOwner")]
public ContentOwner ContentOwner { get; set; }
[XmlElement(ElementName = "invoiceType")]
public string InvoiceType { get; set; }
}
[XmlRoot(ElementName = "settlementEntity")]
public class SettlementEntity
{
[XmlElement(ElementName = "partyIdentification")]
public PartyIdentification PartyIdentification { get; set; }
}
[XmlRoot(ElementName = "adjustmentAndDiscount")]
public class AdjustmentAndDiscount
{
[XmlElement(ElementName = "adjustmentReason")]
public AdjustmentReason AdjustmentReason { get; set; }
// LineItem data
[XmlElement(ElementName = "amount")]
public string Amount { get; set; }
[XmlElement(ElementName = "alternateAdjustmentReference")]
public AlternateAdjustmentReference AlternateAdjustmentReference { get; set; }
// Summary data
[XmlElement(ElementName = "amountTotal")]
public string AmountTotal { get; set; }
[XmlElement(ElementName = "amountNet")]
public string AmountNet { get; set; }
[XmlElement(ElementName = "amountVAT")]
public string AmountVAT { get; set; }
}
【问题讨论】:
-
你能显示类 Invoice 、 SettlementEntity 、 AdjustmentAndDiscount 的代码吗?
-
@uɐpuɐɥƆ 我添加了代码,但不确定它是否有帮助。此属性反序列化问题发生在文档的所有级别
-
我做了同样的事情,它对我有用。检查我的代码
标签: c# xml wcf serialization attributes