2016-04-06 3 views
0

Ich arbeite an einem Projekt, wo ich versuche, Daten aus XML in die Datenbanktabelle einzufügen.Konvertierungsliste <string> in Zeichenfolge oder umgekehrt

Dafür habe ich lokale Variablen erstellt und möchte die XML-Tags in sie einfügen, damit ich später diese lokalen Variablen in die Datenbank einfügen kann.

Die Art, wie ich es tat, war die XML deserialisieren:

static void Main(string[] args) 
      { 
       try 
       { 

        List<FolkbokforingspostTYPE> deserializedList = new List<FolkbokforingspostTYPE>(); 
        deserializedList = Deserialize<List<FolkbokforingspostTYPE>>(); 


        var First = deserializedList.Select(item => item.Personpost.Namn.Fornamn).ToList(); 
        foreach (var o in First) 
        { 
         Console.WriteLine("Namn: " + o); 
        } 

    //local variable that contains the the value of a XML tag. 
    string FirstName = First; 


       } 
    PersonalIdentityNumber... deserializedList contains everything if you need it 
       catch (Exception) 
       { 

        throw; 
       } 
       Console.ReadKey(); 
      } 



private static T Deserialize<T>() where T : new() 
    { 
     // Create an instance of T 
     T ReturnListOfT = CreateInstance<T>(); 


     // Create a new file stream for reading the XML file 
     using (FileStream ReadFileStream = new FileStream("navetout.xml", FileMode.Open, FileAccess.Read, FileShare.Read)) 
     { 
      // Construct a XmlSerializer and use it 
      // to serialize the data from the stream. 
      XmlSerializer SerializerObj = new XmlSerializer(typeof(T)); 
      try 
      { 
       // Deserialize the hashtable from the file 
       ReturnListOfT = (T)SerializerObj.Deserialize(ReadFileStream); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(string.Format("Failed to serialize. Reason: {0}", ex.Message)); 
      } 

     } 
     // return the Deserialized data. 
     return ReturnListOfT; 
    } 

    // function to create instance of T 
    public static T CreateInstance<T>() where T : new() 
    { 
     return (T)Activator.CreateInstance(typeof(T)); 
    } 

Das Problem ist, dass ich nicht die list<string> (das wird der Wert aus dem XML) zu einer lokalen Variablen zuweisen umwandeln .

Aus dem obigen Code können Sie sehen, dass ich das versucht:

string FirstName = First; 

Aber ich bekomme Fehler:

Cannot implicitly convert type 'System.Collections.Generic.List' to 'string'

Ich weiß, warum ich den Fehler, ich frage mich nur, wenn Es gibt einen Weg darum herum? Kann ich irgendwie einer lokalen Variablen eine Liste zuweisen?

Dies ist, wie ich deserialisiert die XML:

[XmlRoot(ElementName = "Sekretessmarkering")] 
public class Sekretessmarkering 
{ 
    [XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")] 
    public string Nil { get; set; } 
} 

[XmlRoot(ElementName = "PersonId")] 
public class PersonId 
{ 
    [XmlElement(ElementName = "PersonNr")] 
    public string PersonNr { get; set; } 
} 

[XmlRoot(ElementName = "HanvisningsPersonNr")] 
public class HanvisningsPersonNr 
{ 
    [XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")] 
    public string Nil { get; set; } 
} 

[XmlRoot(ElementName = "Mellannamn")] 
public class Mellannamn 
{ 
    [XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")] 
    public string Nil { get; set; } 
} 

[XmlRoot(ElementName = "Aviseringsnamn")] 
public class Aviseringsnamn 
{ 
    [XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")] 
    public string Nil { get; set; } 
} 

[XmlRoot(ElementName = "Namn")] 
public class Namn 
{ 
    [XmlElement(ElementName = "Tilltalsnamnsmarkering")] 
    public string Tilltalsnamnsmarkering { get; set; } 
    [XmlElement(ElementName = "Fornamn")] 
    public string Fornamn { get; set; } 
    [XmlElement(ElementName = "Mellannamn")] 
    public Mellannamn Mellannamn { get; set; } 
    [XmlElement(ElementName = "Efternamn")] 
    public string Efternamn { get; set; } 
    [XmlElement(ElementName = "Aviseringsnamn")] 
    public Aviseringsnamn Aviseringsnamn { get; set; } 
} 

[XmlRoot(ElementName = "ForsamlingKod")] 
public class ForsamlingKod 
{ 
    [XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")] 
    public string Nil { get; set; } 
} 

[XmlRoot(ElementName = "Folkbokforing")] 
public class Folkbokforing 
{ 
    [XmlElement(ElementName = "Folkbokforingsdatum")] 
    public string Folkbokforingsdatum { get; set; } 
    [XmlElement(ElementName = "LanKod")] 
    public string LanKod { get; set; } 
    [XmlElement(ElementName = "KommunKod")] 
    public string KommunKod { get; set; } 
    [XmlElement(ElementName = "ForsamlingKod")] 
    public ForsamlingKod ForsamlingKod { get; set; } 
    [XmlElement(ElementName = "Fastighetsbeteckning")] 
    public string Fastighetsbeteckning { get; set; } 
    [XmlElement(ElementName = "FiktivtNr")] 
    public string FiktivtNr { get; set; } 
} 

[XmlRoot(ElementName = "CareOf")] 
public class CareOf 
{ 
    [XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")] 
    public string Nil { get; set; } 
} 

[XmlRoot(ElementName = "Utdelningsadress1")] 
public class Utdelningsadress1 
{ 
    [XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")] 
    public string Nil { get; set; } 
} 

[XmlRoot(ElementName = "Folkbokforingsadress")] 
public class Folkbokforingsadress 
{ 
    [XmlElement(ElementName = "CareOf")] 
    public CareOf CareOf { get; set; } 
    [XmlElement(ElementName = "Utdelningsadress1")] 
    public Utdelningsadress1 Utdelningsadress1 { get; set; } 
    [XmlElement(ElementName = "Utdelningsadress2")] 
    public string Utdelningsadress2 { get; set; } 
    [XmlElement(ElementName = "PostNr")] 
    public string PostNr { get; set; } 
    [XmlElement(ElementName = "Postort")] 
    public string Postort { get; set; } 
} 

[XmlRoot(ElementName = "Riksnycklar")] 
public class Riksnycklar 
{ 
    [XmlElement(ElementName = "FastighetsId")] 
    public string FastighetsId { get; set; } 
    [XmlElement(ElementName = "AdressplatsId")] 
    public string AdressplatsId { get; set; } 
    [XmlElement(ElementName = "LagenhetsId")] 
    public string LagenhetsId { get; set; } 
} 

[XmlRoot(ElementName = "Adresser")] 
public class Adresser 
{ 
    [XmlElement(ElementName = "Folkbokforingsadress")] 
    public Folkbokforingsadress Folkbokforingsadress { get; set; } 
    [XmlElement(ElementName = "Riksnycklar")] 
    public Riksnycklar Riksnycklar { get; set; } 
} 

[XmlRoot(ElementName = "HemortSverige")] 
public class HemortSverige 
{ 
    [XmlElement(ElementName = "FodelselanKod")] 
    public string FodelselanKod { get; set; } 
    [XmlElement(ElementName = "Fodelseforsamling")] 
    public string Fodelseforsamling { get; set; } 
} 

[XmlRoot(ElementName = "Fodelse")] 
public class Fodelse 
{ 
    [XmlElement(ElementName = "HemortSverige")] 
    public HemortSverige HemortSverige { get; set; } 
} 

[XmlRoot(ElementName = "Medborgarskap")] 
public class Medborgarskap 
{ 
    [XmlElement(ElementName = "MedborgarskapslandKod")] 
    public string MedborgarskapslandKod { get; set; } 
    [XmlElement(ElementName = "Medborgarskapsdatum")] 
    public string Medborgarskapsdatum { get; set; } 
} 

[XmlRoot(ElementName = "Personpost")] 
public class Personpost 
{ 
    [XmlElement(ElementName = "PersonId")] 
    public PersonId PersonId { get; set; } 
    [XmlElement(ElementName = "HanvisningsPersonNr")] 
    public HanvisningsPersonNr HanvisningsPersonNr { get; set; } 
    [XmlElement(ElementName = "Namn")] 
    public Namn Namn { get; set; } 
    [XmlElement(ElementName = "Folkbokforing")] 
    public Folkbokforing Folkbokforing { get; set; } 
    [XmlElement(ElementName = "Adresser")] 
    public Adresser Adresser { get; set; } 
    [XmlElement(ElementName = "Fodelse")] 
    public Fodelse Fodelse { get; set; } 
    [XmlElement(ElementName = "Medborgarskap")] 
    public Medborgarskap Medborgarskap { get; set; } 
} 

[XmlRoot(ElementName = "FolkbokforingspostTYPE")] 
public class FolkbokforingspostTYPE 
{ 
    [XmlElement(ElementName = "Sekretessmarkering")] 
    public Sekretessmarkering Sekretessmarkering { get; set; } 
    [XmlElement(ElementName = "Personpost")] 
    public Personpost Personpost { get; set; } 
} 
} 
+0

anstelle von '.ToList()' hast du 'FirstOrDefault()' versucht? –

+0

Nun, es enthält mehrere Werte und wenn ich 'FirstOrDefault()' versuchen, dann gibt es nur den ersten Buchstaben des Wertes zurück. –

+0

Es wäre eine gute Idee, das Debuggen zu starten. Stellen Sie sicher, dass 'Deserialize' wirklich eine Liste von' FolkbokforingspostTYPE' zurückgibt und nicht (zum Beispiel) null. –

Antwort

0

Nun, es enthält mehrere Werte, und wenn ich FirstOrDefault versuchen(), dann gibt er nur den ersten Buchstaben des Wertes ..

Von diesem Kommentar aus scheint es, als ob Ihre List<string> einzelne Buchstaben als Elemente enthält, in denen alle Elemente zusammen das Wort bilden.

An dieser Stelle ist Ihre Frage nach List to string ein wenig sinnvoll.

Statt string FirstName = First;
Verwendung string FirstName = String.Join("", First);

String.Join() werden alle Elemente in der List<string> verbinden und eine string zurückzukehren.

+0

Vielen Dank es funktioniert. Wie ich jedoch in den Kommentaren gesagt habe, ist es mein ultimatives Ziel, mehrere Werte in die Datenbank einzufügen, nicht nur eine Zeichenfolge. Aus diesem Grund musste es eine Liste sein. Ich kann nicht einfach eine große Zeichenfolge einfügen und erwarte, dass sie sich auf mehrere Spalten in der Datenbank verteilt, es muss eine Liste sein, damit die Datenbank weiß, wie die Werte voneinander getrennt und in die Datenbankspalten eingefügt werden. Meine Frage hatte einen sehr schlechten Titel, also verstehe ich, dass ihr verwirrt seid. Es tut mir leid –

+0

Dude: Sie möchten eine Liste (mehrere Elemente) in einer Zeichenfolge-Variable (einzelnes Element) speichern und dann dieses einzelne Element an die Datenbank übergeben, damit die Datenbank es als eine Liste erkennt? Sind Sie im Ernst??? – C4u

+0

Nein, mir wurde klar, dass ich sehr dumm von mir war, die Liste in einer Zeichenfolge zu speichern. Im Moment versuche ich herauszufinden, wie man die Liste ohne String direkt in die Datenbank einfügt. –

0

Ich nehme an, dass Sie die XML laden möchten, die beim Deserialisieren eine Liste der Zeichenfolge zurückgibt, und Sie möchten, dass diese Liste der Zeichenfolge in der Datenbank gespeichert wird, da die Liste der Zeichenfolge kein Datentyp ist beabsichtige, es als String zu speichern.

Wie @ C4ud3x gesagt hat, wird string.Join Ihre Liste zu einer Zeichenkette machen. Aber ich gehe auch davon aus, dass Sie dies für eine bestimmte Situation aus einer Datenbank zurück in eine Liste konvertieren möchten.

Instead of string FirstName = First; use string FirstName = String.Join("", First);

Ändern Sie es in String.Join ("*", First); Dabei ist * ein Sonderzeichen, mit dem Sie Ihre Daten trennen möchten.

Bsp .: First = ['John', 'Doe', 'Foo', 'Bar'];

string FirstName = String.Join("*", First); //John*Doe*Foo*Bar 

dann speichern Sie dies in der Datenbank.

Um es in eine Liste zurück zu konvertieren, können Sie string verwenden.Split

Oder Sie können Ihre Daten in JSON serialisieren, die sehr einfach zu einem Objekt deserialisiert werden kann.

Ein Datenbankbeispiel, das nur JSON verwendet, ist Firebase.

Verwandte Themen