将对象列表转换为 xml 字符串
Posted
技术标签:
【中文标题】将对象列表转换为 xml 字符串【英文标题】:Convert a list of objects to an xml string 【发布时间】:2017-11-10 14:24:11 【问题描述】:您好,我有一个要转换为 xml 的对象列表。这是最终的 xml 应该是什么样子。
<ArrayOfTweet>
<Tweet>
<Photos>
<Photo>
<PhotoHeight>FOO</PhotoHeight>
<PhotoUri>a/random/ur/path</PhotoUri>
<PhotoWidth>923</PhotoWidth>
<SourcePhotoUri>a/random/path</SourcePhotoUri>
</Photo>
</Photos>
<ProfileImage>a/random/path</ProfileImage>
<ScreenName>FOO</ScreenName>
<Text>some text</Text>
<TweetId>1234</TweetId>
<UserId>1234</UserId>
<Username>BAR</Username>
</Tweet>
<Tweet>
<Photos>
<Photo>
<PhotoHeight>FOO</PhotoHeight>
<PhotoUri>a/random/ur/path</PhotoUri>
<PhotoWidth>923</PhotoWidth>
<SourcePhotoUri>a/random/path</SourcePhotoUri>
</Photo>
</Photos>
<ProfileImage>a/random/path</ProfileImage>
<ScreenName>FOO</ScreenName>
<Text>some text</Text>
<TweetId>1234</TweetId>
<UserId>1234</UserId>
<Username>BAR</Username>
</Tweet>
</ArrayOfTweet>
我已经将列表中的每个对象都转换成这样的 xml 字符串
//TweetList is the list of tweet objects
List<string> xmlStringTweetList = new List<string>();
foreach (var tl in TweetList)
xmlStringTweetList.Add(toXML(tl));
private string toXML(Tweet t)
var stringwriter = new System.IO.StringWriter();
var serializer = new XmlSerializer(t.GetType());
serializer.Serialize(stringwriter, t);
return stringwriter.ToString();
我尝试使用
将该列表转换为上述格式XElement xmlElements = new XElement("ArrayOfTweet", xmlStringTweetList.Select(i => new XElement("Tweet", i)));
但我不需要额外的<Tweet></Tweet>
。有没有办法做到这一点?
【问题讨论】:
你为什么不一次性获取整个对象结构并序列化? 你的意思是序列化 TweetList 对象?我试过了,但我不知道如何让它正常工作。我收到错误。你有什么建议吗?我很乐意这样做,因为这样会更容易 我刚刚发布了一个关于如何将其序列化为一个对象的答案。 方括号中的类型错误。取出Tweet上面的[XmlArray],换成[XmlElement]。 【参考方案1】:我做了一个小提琴here,它说明了一种一次性序列化对象的方法,而不是将字符串拼凑在一起。
我怀疑你的额外<Tweet></Tweet>
是因为列表中的值为 null 或空值,因为我在上面的测试中没有遇到它。
【讨论】:
【参考方案2】:我认为XElement xmlElements = new XElement("ArrayOfTweet", xmlStringTweetList.Select(i => XElement.Parse(i)));
应该这样做。
【讨论】:
谢谢@Martin,我收到一个错误 System.Xml.XmlElement does not contain a definition for 'Parse' 但我在这里查看msdn.microsoft.com/en-us/library/bb468714(v=vs.110).aspx 它就在那里。我必须弄清楚为什么会这样 对不起,应该是XElement.Parse
。
感谢马丁,我做了更改,它也有效!但我会选择@maccetturas fiddle,因为它很干净。以上是关于将对象列表转换为 xml 字符串的主要内容,如果未能解决你的问题,请参考以下文章