Mar*_*tin 7 .net c# generics xmlserializer
当我尝试运行以下代码(两个分离的程序集)时
public interface ITest
{
}
Run Code Online (Sandbox Code Playgroud)
using System;
public class TestClass
{
public void Test<T>(T x) where T : ITest { }
}
static class Program
{
static void Main(string[] args)
{
new System.Xml.Serialization.XmlSerializer(typeof(TestClass));
}
}
Run Code Online (Sandbox Code Playgroud)
使用以下命令在Windows 7 64位中编译:
c:\ Windows\Microsoft.NET\Framework\v2.0.50727\csc/target:library ClassLibrary.cs
c:\ Windows\Microsoft.NET\Framework\v2.0.50727\csc /reference:ClassLibrary.dll Program.cs
我得到了这个例外:
System.InvalidOperationException:无法生成临时类(result = 1).错误CS0012:类型ITest在未引用的程序集中定义.您必须添加对程序集ClassLibrary的引用,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null hinzu.
在System.Xml.Serialization.Compiler.Compile(大会父,串NS,XmlSerializerCompilerParameters xmlParameters,证据证据)
在System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping [] xmlMappings,类型[]类型,字符串defaultNamespace,证据证据, XmlSerializerCompilerParameters参数,装配组件,哈希表组件)在System.Xml.Serialization.TempAssembly..ctor(XmlMapping [] xmlMappings,类型[]类型,字符串defaultNamespace,字符串位置,证据证据)在System.Xml.Serialization.XmlSerializer.GenerateTempAssembly在Program.Main(String [] args)的System.Xml.Serialization.XmlSerializer..ctor(Type type,String defaultNamespace)中的(XmlMapping xmlMapping,Type type,String defaultNamespace)
从TestClass移除where T:ITest或根本不使用泛型(例如使用public void Test(ITest x))将防止抛出异常,但我需要在我的实际应用程序中使用此构造.
有人理解为什么XmlSerializer无法处理where约束吗?
我觉得你运气不好.以下是Microsoft对此问题的回复:
感谢您提交此问题.不幸的是,我们已经决定不解决它,因为修复的风险超过了它的好处.当下一次实现此更改的机会出现时,希望未来版本的Windows Communication Foundation中的新序列化技术能够满足您的需求.如果此问题导致严重的负面业务影响,请与Microsoft产品支持服务联系.我很遗憾我们无法提供更好的解决方案.请放心,我们认真考虑了这个问题 - 一个不会修复的决定绝非易事.
这基本上说你应该使用DataContractSerializer而不是XmlSerializer或更改你的对象结构.
归档时间: |
|
查看次数: |
3790 次 |
最近记录: |