2012-03-24 9 views
0

unter anderen Daten, ich habe die folgenden XML mir gesendet:XML-Deklaration für die Deserialisierung

<jx:Agency xsi:type="nc:OrganizationType1"> 
    <nc:OrganizationAbbreviationText>ABC</nc:OrganizationAbbreviationText> 
</jx:Agency> 

In meinem Code, ich habe Agentur erklärt wie folgt (ich habe auch die Klasse-Agentur mit einem einzigen XmlAttribute OrganizationAbbreviationText):

[XmlElement("Agency", Namespace = jx)] 
public Agency Agency { get; set; } 

Aber wenn ich deserialisieren versuchen, erhalte ich "der angegebene Typ nicht erkannt wurde: name = 'OrganizationType1'" zusammen mit dem Namespace = url

Kann jemand die Agentur in meiner Struktur richtig beschreiben?

Ich bin nicht die Struktur serialisiert ... die Datei an mich gesendet wird, und ich bin Deserialisieren es auf folgende Arten:

Document doc; 
using (FileStream fs = new FileStream(pathName, FileMode.Open, FileAccess.Read, FileShare.Read)) 
{ 
    XmlSerializer ser = new XmlSerializer(typeof(Document)); 
    doc = (Document)ser.Deserialize(fs); 
    fs.Close(); 
} 

Aus diesem Grund ist die XML-Datei in die richtig beschrieben werden muss, Dokumentenklasse

mho, Hier ist der Code für die Klasse Agentur:

[XmlElement(Namespace = jx)] 
public class Agency 
{ 
    [XmlAttribute("OrganizationAbbreviationText", Namespace = nc)] 
    public string OrganizationAbbreviationText { get; set; } 
} 

Ich glaube OrganizationType1 nicht wirklich außer ins Spiel kommt, dass ich nicht kann deserialisieren die Datei, die ich ohne sie Adressierung gesendet wird zu werden. jx und nc sind konstante Zeichenfolgen, die URLs enthalten. Ich schätze Ihre Hilfe sehr. Offensichtlich

Dank

+1

Welchen Serialisierer verwenden Sie? – BentOnCoding

+0

XmlSerializer ser = neuer XmlSerializer (typeof (Document)); – user1277900

+0

Poste bitte deinen Serialisierungscode. Sie sollten dieses Problem nicht haben, es sei denn, Sie versuchen speziell, dieses Attribut zu lesen. – BentOnCoding

Antwort

0

, du bist ein Typ fehlt, die nc:OrganizationType1 entspricht. In diesem Fall können Sie einfach die Klasse Agency für wiederverwenden (wenn Agency entweder der Standardtyp oder nur nc:OrganizationType1 ist).

Auch OrganizationAbbreviationText in der Agentur ist ein XmlElement und nicht XmlAttribute.

Ich habe Ihren Fall vereinfacht und einen Beispielcode erstellt, der funktioniert. Bitte beachten Sie [XmlType(TypeName = "OrganizationType1", Namespace = "some-name-space")] auf der Oberseite der Agency Klasse. Hoffe es hilft, glücklich zu erklären

[XmlRoot("Agency")] 
[XmlType(TypeName = "OrganizationType1", Namespace = "some-name-space")] 
public class Agency 
{ 
    [XmlElement("OrganizationAbbreviationText", Namespace = "some-name-space")]  
    public string OrganizationAbbreviationText { get; set; } 
} 

public class Program 
{ 
    [STAThread] 
    public static void Main() 
    { 
     string xml = "<Agency xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" 
        + " xmlns:nc=\"some-name-space\" xsi:type=\"nc:OrganizationType1\">" 
          + "<nc:OrganizationAbbreviationText>ABC</nc:OrganizationAbbreviationText>" 
        + "</Agency>"; 

     using (StringReader reader = new StringReader(xml)) 
     {  
      XmlSerializer ser = new XmlSerializer(typeof(Agency)); 
      var agency = (Agency)ser.Deserialize(reader); 
      Console.WriteLine(agency.OrganizationAbbreviationText); 
     } 
    } 

} 
Verwandte Themen