是否可以在C#中将Func <object>导出为XML?</object>

时间:2013-11-18 15:19:52

标签: c# xml

我有一个自定义类DataLookupList,它有以下私有成员

private Func<TValue, TKey> m_selector;

我希望能够将其状态导出为XML(XML是一项要求,所以我不能使用二进制或其他东西),所以我可以在另一个地方导入该对象。 我似乎无法导出Func&lt;&gt;尽管如此。通过

将其导出到XML时
new XElement( "Selector", m_selector )

我得到它的字符串表示形式是“System.Func`2 [System.Int32,System.Int32]”,但是当我尝试通过

导入它时
TypeDescriptor.GetConverter( typeof( Func<TValue, TKey> ) ).ConvertFromString( element.Value )

我收到错误,因为无法解析“System.Func`2 [System.Int32,System.Int32]”。

是否可以将Func存储到字符串中,如果不是为什么?

1 个答案:

答案 0 :(得分:2)

如果可以选择更改为Expression<Func<TValue, TKey>>,请查看Serializing and Deserializing Expression Trees in C#

Func<>视为已编译的函数(如C#编译器生成的IL代码),而不是未编译的代码(如C#代码)。无法始终序列化和反序列化Func<>。例如,以下Func<string>来自lambda,并在此计算机上的此线程上读取并修改此方法中运行的i变量。如果我将此Func序列化,然后在另一台计算机上反序列化,那么i应该读写什么?

void SomeMethod()
{
    int i = 0;
    Func<string> inc = () => (i++).ToString();
    inc();
    inc();
    Console.WriteLine(i); // 2
}