将对象列表转换为 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)));

但我不需要额外的&lt;Tweet&gt;&lt;/Tweet&gt;。有没有办法做到这一点?

【问题讨论】:

你为什么不一次性获取整个对象结构并序列化? 你的意思是序列化 TweetList 对象?我试过了,但我不知道如何让它正常工作。我收到错误。你有什么建议吗?我很乐意这样做,因为这样会更容易 我刚刚发布了一个关于如何将其序列化为一个对象的答案。 方括号中的类型错误。取出Tweet上面的[XmlArray],换成[XmlElement]。 【参考方案1】:

我做了一个小提琴here,它说明了一种一次性序列化对象的方法,而不是将字符串拼凑在一起。

我怀疑你的额外&lt;Tweet&gt;&lt;/Tweet&gt; 是因为列表中的值为 null 或空值,因为我在上面的测试中没有遇到它。

【讨论】:

【参考方案2】:

我认为XElement xmlElements = new XElement("ArrayOfTweet", xmlStringTweetList.Select(i =&gt; 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 字符串的主要内容,如果未能解决你的问题,请参考以下文章

将 Java 对象转换为 XML 字符串

如何将 XML 节点内容转换为 VBA 中的字符串?

将 XML 字符串 API 响应转换为键值对象 C#

如何将带有参数数组的字符串 xml 转换为 .NET Core 中的对象

如何使用c#将xml字符串转换为对象

如何将字符串对象(包含 XML)“转换”为现有 JSP 页面上的元素