簡體   English   中英

Amazon XML反序列化處理報告並獲取空值

[英]Amazon XML deserialize processingreport and getting null values

我正在嘗試將xml文件讀入類以返回其值。 這些類是通過xsd.exe從Amazon的xsd文件創建的。 我用來嘗試反序列化的代碼是:

string FeedSubmissionID = "8395421750";
FileStream responseFile = new FileStream(("d:/Amazon/SubmissionResult-" +  FeedSubmissionID + ".txt"), FileMode.Open, FileAccess.Read);           
ProcessingReport _report = new ProcessingReport();
XmlSerializer _des = new XmlSerializer(typeof(ProcessingReport), new XmlRootAttribute("AmazonEnvelope"));
_report = (ProcessingReport)_des.Deserialize(responseFile);

我在ProcessingReport中使用的代碼是:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://mws.amazonaws.com/doc/2009-01-01/", IsNullable = false)]
public partial class ProcessingReport
{

    private string documentTransactionIDField;

    private ProcessingReportStatusCode statusCodeField;

    private ProcessingReportProcessingSummary processingSummaryField;

    private ProcessingReportResult[] resultField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(DataType = "positiveInteger")]
    public string DocumentTransactionID
    {
        get
        {
            return this.documentTransactionIDField;
        }
        set
        {
            this.documentTransactionIDField = value;
        }
    }

    /// <remarks/>
    public ProcessingReportStatusCode StatusCode
    {
        get
        {
            return this.statusCodeField;
        }
        set
        {
            this.statusCodeField = value;
        }
    }

    /// <remarks/>

    public ProcessingReportProcessingSummary ProcessingSummary
    {
        get
        {
            return this.processingSummaryField;
        }
        set
        {
            this.processingSummaryField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("Result")]
    public ProcessingReportResult[] Result
    {
        get
        {
            return this.resultField;
        }
        set
        {
            this.resultField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public enum ProcessingReportStatusCode
{

    /// <remarks/>
    Complete,

    /// <remarks/>
    Processing,

    /// <remarks/>
    Rejected,
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class ProcessingReportProcessingSummary
{

    private string messagesProcessedField;

    private string messagesSuccessfulField;

    private string messagesWithErrorField;

    private string messagesWithWarningField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(DataType = "nonNegativeInteger")]
    public string MessagesProcessed
    {
        get
        {
            return this.messagesProcessedField;
        }
        set
        {
            this.messagesProcessedField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(DataType = "nonNegativeInteger")]
    public string MessagesSuccessful
    {
        get
        {
            return this.messagesSuccessfulField;
        }
        set
        {
            this.messagesSuccessfulField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(DataType = "nonNegativeInteger")]
    public string MessagesWithError
    {
        get
        {
            return this.messagesWithErrorField;
        }
        set
        {
            this.messagesWithErrorField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(DataType = "nonNegativeInteger")]
    public string MessagesWithWarning
    {
        get
        {
            return this.messagesWithWarningField;
        }
        set
        {
            this.messagesWithWarningField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class ProcessingReportResult
{

    private string messageIDField;

    private ProcessingReportResultResultCode resultCodeField;

    private string resultMessageCodeField;

    private string resultDescriptionField;

    private ProcessingReportResultAdditionalInfo additionalInfoField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(DataType = "nonNegativeInteger")]
    public string MessageID
    {
        get
        {
            return this.messageIDField;
        }
        set
        {
            this.messageIDField = value;
        }
    }

    /// <remarks/>
    public ProcessingReportResultResultCode ResultCode
    {
        get
        {
            return this.resultCodeField;
        }
        set
        {
            this.resultCodeField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(DataType = "positiveInteger")]
    public string ResultMessageCode
    {
        get
        {
            return this.resultMessageCodeField;
        }
        set
        {
            this.resultMessageCodeField = value;
        }
    }

    /// <remarks/>
    public string ResultDescription
    {
        get
        {
            return this.resultDescriptionField;
        }
        set
        {
            this.resultDescriptionField = value;
        }
    }

    /// <remarks/>
    public ProcessingReportResultAdditionalInfo AdditionalInfo
    {
        get
        {
            return this.additionalInfoField;
        }
        set
        {
            this.additionalInfoField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public enum ProcessingReportResultResultCode
{

    /// <remarks/>
    Error,

    /// <remarks/>
    Warning,
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class ProcessingReportResultAdditionalInfo
{

    private string sKUField;

    private string fulfillmentCenterIDField;

    private string amazonOrderIDField;

    private string amazonOrderItemCodeField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(DataType = "normalizedString")]
    public string SKU
    {
        get
        {
            return this.sKUField;
        }
        set
        {
            this.sKUField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(DataType = "normalizedString")]
    public string FulfillmentCenterID
    {
        get
        {
            return this.fulfillmentCenterIDField;
        }
        set
        {
            this.fulfillmentCenterIDField = value;
        }
    }

    /// <remarks/>
    public string AmazonOrderID
    {
        get
        {
            return this.amazonOrderIDField;
        }
        set
        {
            this.amazonOrderIDField = value;
        }
    }

    /// <remarks/>
    public string AmazonOrderItemCode
    {
        get
        {
            return this.amazonOrderItemCodeField;
        }
        set
        {
            this.amazonOrderItemCodeField = value;
        }
    }
}

最后是xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
<Header>
    <DocumentVersion>1.02</DocumentVersion>
    <MerchantIdentifier>??????????????</MerchantIdentifier>
</Header>
<MessageType>ProcessingReport</MessageType>
<Message>
    <MessageID>1</MessageID>
    <ProcessingReport>
        <DocumentTransactionID>8395421750</DocumentTransactionID>
        <StatusCode>Complete</StatusCode>
        <ProcessingSummary>
            <MessagesProcessed>1</MessagesProcessed>
            <MessagesSuccessful>0</MessagesSuccessful>
            <MessagesWithError>1</MessagesWithError>
            <MessagesWithWarning>0</MessagesWithWarning>
        </ProcessingSummary>
        <Result>
            <MessageID>1</MessageID>
            <ResultCode>Error</ResultCode>
            <ResultMessageCode>5000</ResultMessageCode>
            <ResultDescription>XML Parsing Error at Line 22, Column 24: cvc-minLength-valid: Value &apos;&apos; with length = &apos;0&apos; is not facet-valid with respect to minLength &apos;1&apos; for type &apos;LongStringNotNull&apos;.</ResultDescription>
            <AdditionalInfo>
                <SKU>MySKU</SKU>
            </AdditionalInfo>
        </Result>
    </ProcessingReport>
</Message>
</AmazonEnvelope>

返回的_report對象具有所有空值。

誰能看到我哪里出問題了?

問題解決了。

需要發生的是,需要將Amazon feed的結果流首先保存到文件,然后訪問創建的文件並讀入類。 而我試圖直接從流中讀取結果。

希望這對別人有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM