C# 无法隐式转换类型';系统类型';至';字符串';

C# 无法隐式转换类型';系统类型';至';字符串';,c#,typeof,C#,Typeof,我正在进行一些Xml序列化,并且得到一个编译项错误 出现错误的代码是: public class EPubBody { [XmlElement(ElementName = "Image", DataType = typeof(EPubImage))] public object[] BodyItems; } 错误出现在typeof(EPubImage)部件上。错误是无法将类型“System.type”隐式转换为“string” 类EPubImage位于相同的namspace中,

我正在进行一些Xml序列化,并且得到一个编译项错误

出现错误的代码是:

public class EPubBody
{
    [XmlElement(ElementName = "Image", DataType = typeof(EPubImage))]
    public object[] BodyItems;
}
错误出现在
typeof(EPubImage)
部件上。错误是
无法将类型“System.type”隐式转换为“string”

EPubImage
位于相同的namspace中,如下所示:

public class EPubImage
{
    [XmlAttribute("imagePath")]
    public string ImagePath { get; set; }

}
我猜
typeof(EPubImage)
返回的是
系统。Type
而不是
字符串。关于如何确保typeof语句将返回字符串而不是System.Type的任何指针?

根据,使用
DataType
属性指定XSD数据类型,而不是.NET类型:

一种XML模式数据类型,由万维网联盟(www.w3.org)名为“XML模式第2部分:数据类型”的文档定义

请尝试以下方法:

public class EPubBody
{
    [XmlElement(ElementName = "Image")]
    public EPubImage[] BodyItems;
}

显然,
数据类型
字符串
,而
类型
属性是
类型

,我为XmlElement(字符串,类型)找到了对XmlElement()的重写,所以我尝试了这个方法,并且效果很好

public class EPubBody
{
    [XmlElement("image", typeof(EPubImage))]
    public object[] BodyItems;
}

当我说“它有效”时,我的意思是我不再是编译时错误。另一个问题是让它表现出中所示的行为。

可能是
typeof(EPubImage)。ToString()
DataType
很可能是字符串,而不是类型。尝试使用完全限定名
EPubImage
@Tim I,但当它说它是expect a
string
时,意味着它需要一个32位整数。那我一定错了。@Tim不能开玩笑吗?@ColeJohnson-当然,我可以开玩笑;很明显这是个笑话。我觉得你的评论很幽默,但我不是100%确定,因此我的“嗯”:)我更喜欢将字段保留为一个对象数组,因为我将使用多种类型,根据在的示例,我猜我被注释中的示例误导了。是否有任何重写可以让typeof(EPubImage)返回字符串?否。。属性中需要的是编译时常量。这不是返回
字符串的运算符/函数所提供的。它返回任何东西这一简单事实意味着它可以是可变的(因为C#没有常量的概念)。