2017-03-15 3 views
0

Der Fehler lautet:Fehler beim Serialisieren von XML zu Objekt wegen innerem Attribut?

Beim Deserialisieren des Objekts vom Typ Releye.Solution.Nordnet.ExternalService.AggregatedCustomerInfoJson ist ein Fehler aufgetreten. Endelement 'availableForTrading' aus Namespace '' erwartet. Gefundenes Element 'curr' aus dem Namensraum ''.

Ich vermute, dass es etwas mit dem Tag "availableForTrading" zu tun hat (und eine Kopule mit mehr Attributen) haben das "innere Attribut" von "curr = SEK".

Ich weiß nicht, wie man damit richtig umgehen. Jeder Rat geschätzt.

Meine Klasse sieht wie folgt aus:

[DataContract] 
public class AccountSummaryItem 
{ 
    public AccountSummaryItem() 
    { 
    } 

    [DataMember(Name = "userMapping")] 
    public List<UserMappingItem> usermappings { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string accno { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public int? atyid { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string category { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string minor { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string deceased { get; set; } 

    [DataMember(Name = "riskEstimate")] 
    public RiskEstimate RiskEstimate { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string amlCustomerInfoUpdateNeeded { get; set; } 

    [DataMember(EmitDefaultValue = false, Name = "availableForTrading", IsRequired = false)] 
    public string availableForTrading { get; set; } 

    [DataMember(EmitDefaultValue = false, Name = "availableForWithdrawal", IsRequired = false)] 
    public string availableForWithdrawal { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public bool blocked { get; set; } 

    [DataMember(EmitDefaultValue = false, Name = "ownCapital", IsRequired = false)] 
    public string ownCapital { get; set; } 

    [DataMember(EmitDefaultValue = false, Name = "pawnValue", IsRequired = false)] 
    public string pawnValue { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public bool shareville { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string totalValue { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string atycode { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string chgid { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string chgname { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public bool hasCreditAgreement { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public bool hasTrustee { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string ofcid { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string ofcname { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string regdate { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string role { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string roleDescription { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string username { get; set; } 
} 

Die XML wie folgt aussieht:

<accountSummary> 
<amlCustomerInfoUpdateNeeded>false</amlCustomerInfoUpdateNeeded> 
<availableForTrading curr="SEK">269061.14</availableForTrading> 
<availableForWithdrawal curr="SEK">10921.14</availableForWithdrawal> 
<blocked>false</blocked> 
<deceased>false</deceased> 
<minor>false</minor> 
<ownCapital curr="SEK">1152082.20718864</ownCapital> 
<pawnValue curr="SEK">0.0</pawnValue> 
<totalValue curr="SEK">10921.14</totalValue> 
<accno>11245381213</accno> 
<atycode>Depåkonton</atycode> 
<atyid>108</atyid> 
<category>OWNER</category> 
<chgid>131476</chgid> 
<chgname>SE PRB</chgname> 
<hasTrustee>false</hasTrustee> 
<ofcid>122</ofcid> 
<ofcname>PRB</ofcname> 
<regdate>1998-08-18</regdate> 
</accountSummary> 
+1

Ich denke, Ihr Verdacht ist richtig. Versuchen Sie, Ihre XML-Datei zu kopieren, erstellen Sie eine neue # C-Klasse und klicken Sie dann auf "Bearbeiten" -> "Inhalte einfügen" -> "XML als Klassen einfügen" und sehen Sie, ob Sie damit arbeiten können. –

+0

Wenn Sie 'curr =" SEK "' ignorieren möchten, können Sie XML-Dateien (open, load, find/replace) vor der Deserialisierung vorverarbeiten. – Sinatr

+0

Können Sie den Serialisierungscode veröffentlichen? –

Antwort

0

ich eine akzeptable Lösung gefunden. Durch das Hinzufügen einer Klasse repräsentiert dieses Attribut in der folgenden Weise:

[DataContract] 
public class AccountSummary_ownCapital 
{ 
    public AccountSummary_ownCapital() 
    { 
    } 

    [DataMember(EmitDefaultValue = false, Name = "$")] 
    public double ownCapital { get; set; } 

    [DataMember(EmitDefaultValue = false)] 
    public string curr { get; set; } 
} 

Und dann zu meinem „alten“ Klassenwechsel (für die spezifischen Eigenschaften des inneren „curr“ enthalten):

[DataMember(EmitDefaultValue = false)] 
public AccountSummary_ownCapital ownCapital { get; set; } 

Dann Ich bekomme dieses nette benutzerdefinierte Objekt, das sowohl den Wert für das curr-Attribut als auch den Wert für das "ownCapital" enthält.

Verwandte Themen