WCF反序列化问题
我的“Location”对象在我的WCF datacontract中没有被序列化,但是,所有其他变量都被正确设置。当我试图在location对象中输出变量时,我得到了“对象引用未设置为对象实例”错误 我的数据合同:WCF反序列化问题,wcf,serialization,Wcf,Serialization,我的“Location”对象在我的WCF datacontract中没有被序列化,但是,所有其他变量都被正确设置。当我试图在location对象中输出变量时,我得到了“对象引用未设置为对象实例”错误 我的数据合同: [DataContract(Namespace = "")] public class CalcRequest : BaseRequest { [DataMember(Name = "Products")] public List<Product> pro
[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;
}
我的XML请求(版本、msgtype、processorID和customerid在我的“BaseRequest”中):
1
类型
28000
28000
1.
2999
名称1
1.
2.
1999
姓名2
1.
美国
哦
44060
USPS下一天
CD1244578
2FDGRR
。。。不知道为什么这不起作用。。。任何帮助都将不胜感激。我不明白你认为缺少什么,真的 (删除内容-不相关) 更新:为了确保XML中元素的顺序正确,并以正确的顺序进行解释,您可能需要将
order=xxx
语句添加到数据成员属性中-
否则,数据协定序列化程序将按字母顺序进行序列化(并反序列化)(XmlSerializer除外,XmlSerializer按字段出现的顺序进行序列化)
字母顺序区分大小写,即在任何小写字符之前考虑任何大写字符
如果您有多个相同顺序的元素(这不是问题),那么它们将按字母顺序进行序列化(例如,order=1的所有元素将按字母顺序进行序列化,然后是order=2的所有元素,依此类推)
对于派生类,将首先序列化基类的属性(按字母顺序),然后序列化派生类的属性(也按字母顺序)。XML请求的其余部分是什么样子的?用完整的请求更新了我的问题我想我希望有人能发现一个明显的问题。当我尝试调试.WriteLine(request.location.country)时;它说“对象引用未设置为对象的实例”,因此当您在调试模式下查看WriteLine函数中的对象时,哪个对象为空?@marc_s是的,将xml转换为对象的过程似乎是个问题。。。但只针对Location对象,因为我可以访问所有其他对象objects@Chris:“序列化”通常用于对象-->XML,而反序列化用于XML-->对象-这就是为什么您最初的问题标题有点混乱(至少对我来说是这样)。添加“顺序”解决了这个问题。谢谢我不知道它是按字母顺序排列的。
[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;
}
<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>