WCF反序列化问题

时间:2010-01-12 16:06:42

标签: wcf serialization

我的“位置”对象未在我的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>

...不确定为什么这不起作用......任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:3)

我不明白你认为缺少什么,真的......

(删除的东西 - 不相关)

更新:以确保XML中元素的顺序正确并按正确顺序解释,您可能希望将Order=xxx语句添加到数据成员属性 - < / p>

否则,数据合同序列化程序将按字母顺序序列化(和反序列化) (除了按字段显示顺序序列化的XmlSerializer)。

字母顺序区分大小写,即。在任何小写字符之前都会考虑任何大写字符。

如果您有多个相同顺序的元素(这不是问题),那么它们将按顺序按字母顺序排序(例如,Order = 1的所有元素将按字母方式序列化 - 然后所有元素都带有Order = 2等等。

对于派生类,基类的属性将首先(按字母顺序)和派生类的属性(也按字母顺序)进行序列化。