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