我想请教如何通过接口实例使用XMLSerialization生成一个xml文件.具体如下:
public interface IMyTest
{
   int age{get;}
   IList<IOther> Bob {get;}  //IOther 也是一个接口
}class A : IMyTest    
{}
...                                   //若干个类实现接口
...
Class F : IMyTest
{}void mymain(IMyTest instance)
{
   //这里我得到IMyTest 的接口实例
    如何使用XMLSerialization序列化
}

解决方案 »

  1.   

    MS的回答非常干脆:XmlSerializer不能序列化接口类型。
    哪怕你定义为object都可以,但是任何变量类型为接口的都不能序列化,虽然很囧,但是事实就是这样。
    你可以把接口换成抽象类,或者实现IXmlSerializable接口,或者改成IList Bob {get;},或者在Bob属性上加上XmlIgnore标记,另外写个IList BobForSerialize {get ;}……
    不管哪种办法都很ugly,你自己决定吧。ps:只读的属性可以被序列化吗?有点疑问。
      

  2.   

    如果屏蔽IList <IOther> Bob {get;} 如下
    public interface IMyTest 

      int age{get;} 
    } 可以序列化吗
      

  3.   


    你不可能单单序列化一个接口,这个很容易理解吧?因为接口不是对象的实际类型,只是定义的规范。
    继承了IMyTest的实体类A、F可以被序列化,但是如果哪个类的某个属性类型定义为IMyTest,这个类是无法被序列化的,这个是规定。
      

  4.   

     引用 5 楼  
    如果屏蔽IList <IOther> Bob {get;} 如下 
    public interface IMyTest 

      int age{get;} 
    } 可以序列化吗 
     你不可能单单序列化一个接口,这个很容易理解吧?因为接口不是对象的实际类型,只是定义的规范。 
    继承了IMyTest的实体类A、F可以被序列化,但是如果哪个类的某个属性类型定义为IMyTest,这个类是无法被序列化的,这个是规定。 我的意思是我获得了 IMyTest的实例,我如何 序列化实现这个接口的类.
    因为得到找个IMyTest的时候不知道到底是那个类实例化了它
      

  5.   

     引用 5 楼  
    如果屏蔽IList <IOther> Bob {get;} 如下 
    public interface IMyTest 

      int age{get;} 
    } 可以序列化吗 
     你不可能单单序列化一个接口,这个很容易理解吧?因为接口不是对象的实际类型,只是定义的规范。 
    继承了IMyTest的实体类A、F可以被序列化,但是如果哪个类的某个属性类型定义为IMyTest,这个类是无法被序列化的,这个是规定。 我的意思是我获得了 IMyTest的实例,我如何 序列化实现这个接口的类.
    因为得到找个IMyTest的时候不知道到底是那个类实例化了它
      

  6.   

    你首先要知道实例的类型才能序列化,在XmlSerializer里所有需要序列化的类型都必须先定义好,要么在类的定义里,要么在生成XmlSerializer的时候指定。
    你可以通过GetType方法得到对象的类型,有没有实现IMyTest接口其实并没有关系。