如何将 List<ExpandoObject> 转换为 XML 字符串

pat*_*lee 1 c# xml telerik expandoobject dynamicobject

我想使用 ExpandoObjects 列表作为 Telerik 报告的数据源,但 Telerik 报告目前似乎不支持此功能。他们确实支持将 XML 作为数据源,所以我试图将我的 ExpandoObjects 列表转换为 XML 字符串。

我已经看到(在Can I serialize an ExpandoObject in .NET 4?),可以通过 jsonFx 通过这个(VB.net 代码,而不是 c#)将单个 ExpandoObject 序列化为 XML 字符串:

dim XMLwriter As New JsonFx.Xml.XmlWriter
dim serializedExpando as string = XMLwriter.Write(obj)
Run Code Online (Sandbox Code Playgroud)

或其等效的 c# 代码:

JsonFx.Xml.XmlWriter XMLwriter = new JsonFx.Xml.XmlWriter();
String serializedExpando  = XMLwriter.Write(obj);
Run Code Online (Sandbox Code Playgroud)

如何将整个列表序列化为 XML 字符串?

Yuv*_*kov 6

您可以通过先将 the 转换为 aExpandoObject来序列化它IDictionary<string, object>,然后使用DataContractSerializerfor 序列化:

void Main()
{
    dynamic firstExpando = new ExpandoObject();
    firstExpando.Name = "Name";
    firstExpando.Age = 1;

    dynamic secondExpando = new ExpandoObject();
    secondExpando.Name = "SecondName";
    secondExpando.Age = 2;

    var expandoList = new List<ExpandoObject> {firstExpando, secondExpando};

    var list = expandoList.Select(expando => (IDictionary<string, object>)expando)
                          .ToList();

    var dataContractSerializer = new DataContractSerializer(list.GetType());
    using (MemoryStream memoryStream = new MemoryStream())
    {
        dataContractSerializer.WriteObject(memoryStream, list);
        string outputXml = Encoding.UTF8.GetString(memoryStream.ToArray())
    }
}
Run Code Online (Sandbox Code Playgroud)