Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换列表<;字符串>;串_C#_Xml - Fatal编程技术网

C# 转换列表<;字符串>;串

C# 转换列表<;字符串>;串,c#,xml,C#,Xml,我正在做一个项目,我试图将数据从XML插入数据库表 为此,我创建了局部变量,并希望将XML标记插入其中,以便以后可以将这些局部变量插入数据库 我的做法是反序列化XML: static void Main(string[] args) { try { List<FolkbokforingspostTYPE> deserializedList = new

我正在做一个项目,我试图将数据从XML插入数据库表

为此,我创建了局部变量,并希望将XML标记插入其中,以便以后可以将这些局部变量插入数据库

我的做法是反序列化XML:

   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));
    }
但我得到了一个错误:

无法隐式转换类型 “System.Collections.Generic.List”到“string”

我知道我为什么会出错,我只是想知道是否有办法解决这个问题?我能给局部变量分配一个列表吗

以下是我反序列化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; }
}
} 

它包含多个值,如果我尝试FirstOrDefault(),那么它只返回值的第一个字母

从这个注释来看,您的
列表中似乎包含单个字母作为条目,所有条目一起构成单词

在这一点上,您关于如何将
列表转换为字符串的问题有点道理

而不是
stringfirstname=First
使用
stringfirstname=string.Join(“,First”)


String.Join()
将联接
列表中的所有项目
并返回一个
字符串

我假设您希望加载xml,当反序列化时返回一个字符串列表,您希望该字符串列表存储在数据库中,但由于字符串列表不是数据库可以处理的数据类型,因此您打算将其存储为绳子

正如@C4ud3x所说,string.Join将把您的列表变成一个字符串。但我还假设您希望在某些场景中将其转换回数据库中的列表

而不是字符串FirstName=First;使用字符串名= Join(“,第一个)

将其更改为String.Join(“*”,第一个);其中*是要用于分隔数据的特殊字符

例如:First=['John','Doe','Foo','Bar']

string FirstName = String.Join("*", First); //John*Doe*Foo*Bar
然后将其存储到数据库中

要将其转换回列表,可以使用string.Split

string[] First = FirstName.Split('*', StringSplitOptions.RemoveEmptyEntries); //['John','Doe','Foo','Bar'];
或者,您可以将数据序列化为JSON,这非常容易反序列化回对象


一个只使用JSON的数据库示例是。

而不是
。ToList()
您是否尝试过
FirstOrDefault()
?它包含多个值,如果我尝试
FirstOrDefault()
,那么它只返回值的第一个字母。开始调试是个好主意。验证
反序列化
确实返回了
FolkBookForingsPostType的列表,而不是(例如)null。没有注意到之前的注释“。它只返回值的第一个字母”。这是一个很大的暗示。你想要一个列表,但是有一个字符串。您看到该行为的唯一原因是
反序列化列表
实际上是一个字符串。这意味着问题出在您的
反序列化
方法中:尽管您请求了
FolkBookForingsPostType的列表
,但它仍返回一个字符串。您需要调试该方法。我认为是foreach循环导致只向控制台写入一个字母,因为当您使用FirstOrDefault()时,它在字符串上循环。谢谢,它确实有效。然而,正如我在评论中所说,我的最终目标是向数据库中插入多个值,而不仅仅是一个字符串。这就是为什么它必须是一个列表。我不能只插入一个大字符串,然后期望它分布在数据库中的多个列上,它必须是一个列表,以便数据库知道如何将值彼此分离,并将它们插入数据库列中。我的问题标题很糟糕,所以我知道你们有些困惑。对不起,杜德:你想在一个字符串变量(单个项)中存储一个列表(多个项),然后能够将此单个项传递给数据库,以便数据库将其识别为列表吗?你是认真的吗???不,我意识到我把列表存储成字符串是非常愚蠢的。现在我正试图找出如何将列表直接插入数据库,而不使用字符串。那么这个问题就不符合你的真正目标了。主题、文本和代码与数据库关系不大。我建议你删除这个问题,然后继续新的问题。也许是更简单的方法。如果你继续处理你在这个问题上的问题,你可能会把人们弄糊涂。
string[] First = FirstName.Split('*', StringSplitOptions.RemoveEmptyEntries); //['John','Doe','Foo','Bar'];