我的“位置”对象未在我的WCF datacontract中进行序列化,但是,正确设置了所有其他变量。当我尝试在location对象中输出变量时,我得到“对象引用未设置为对象的实例”错误
我的DataContract:
[DataContract(Namespace = "")]
public class CalcRequest : BaseRequest
{
[DataMember(Name = "Products")]
public List<Product> products;
[DataMember(Name = "Location")]
public Location location;
[DataMember(Name = "ShippingMethod")]
public string shippingMethod;
[DataMember(Name = "SystemPromotionCode")]
public string systemPromotionCode;
[DataMember(Name = "UserPromotionCode")]
public string userPromotionCode;
}
“位置”对象:
[DataContract(Name = "Location", Namespace = "")]
public class Location
{
public Location()
{
// do nothing
}
[DataMember(Name = "Country")]
public string country;
[DataMember(Name = "StateProvince")]
public string stateProvince;
[DataMember(Name = "PostalCode")]
public string postalCode;
}
我的XML请求(版本,msgtype,processorID和customerid在我的“BaseRequest”中):
<root>
<Version>1.0</Version>
<MsgType>type</MsgType>
<ProcessorId>28000</ProcessorId>
<CustomerId>28000</CustomerId>
<Products>
<Product>
<SKU>1</SKU>
<Price>2999</Price>
<ProductName>name1</ProductName>
<Quantity>1</Quantity>
</Product>
<Product>
<SKU>2</SKU>
<Price>1999</Price>
<ProductName>name2</ProductName>
<Quantity>1</Quantity>
</Product>
</Products>
<Location>
<Country>US</Country>
<StateProvince>OH</StateProvince>
<PostalCode>44060</PostalCode>
</Location>
<ShippingMethod>USPS-NextDay</ShippingMethod>
<SystemPromotionCode>CD1244578</SystemPromotionCode>
<UserPromotionCode>2FDGRR</UserPromotionCode>
</root>
...不确定为什么这不起作用......任何帮助都会受到赞赏。
答案 0 :(得分:3)
我不明白你认为缺少什么,真的......
(删除的东西 - 不相关)
更新:以确保XML中元素的顺序正确并按正确顺序解释,您可能希望将Order=xxx
语句添加到数据成员属性 - < / p>
否则,数据合同序列化程序将按字母顺序序列化(和反序列化) (除了按字段显示顺序序列化的XmlSerializer)。
字母顺序区分大小写,即。在任何小写字符之前都会考虑任何大写字符。
如果您有多个相同顺序的元素(这不是问题),那么它们将按顺序按字母顺序排序(例如,Order = 1的所有元素将按字母方式序列化 - 然后所有元素都带有Order = 2等等。
对于派生类,基类的属性将首先(按字母顺序)和派生类的属性(也按字母顺序)进行序列化。