C# 不区分大小写的反序列化
我有一个XML文件,其中 我们定义了用于序列化或反序列化XML的类 当我们进行反序列化时,如果XML包含如下内容,其中“type”属性是大写的,那么它的抛出错误就像XML(2,2)中有这样的错误一样C# 不区分大小写的反序列化,c#,C#,我有一个XML文件,其中 我们定义了用于序列化或反序列化XML的类 当我们进行反序列化时,如果XML包含如下内容,其中“type”属性是大写的,那么它的抛出错误就像XML(2,2)中有这样的错误一样 <document text="BlankPDF" name="BlankPDF" type="PDF" path="" /> 这就是我们定义属性的方式 反序列化XML时可以忽略大小写吗?我认为简单的答案是否定的,您不能忽略XmlAttributes中的大小写,因为它们区分大小写(请
<document text="BlankPDF" name="BlankPDF" type="PDF" path="" />
这就是我们定义属性的方式
反序列化XML时可以忽略大小写吗?我认为简单的答案是否定的,您不能忽略XmlAttributes中的大小写,因为它们区分大小写(请参见此)。这意味着您将遇到许多问题(这就是其中之一),如果您的文档是混合格式的 如果所有文档中的属性名称类型都以大写形式存储,那么您能否更改XmlAttribute以反映其存储方式,因此将行更改为:
[DescriptionAttribute("The sharepoint's document type.")] [XmlAttribute("**TYPE**")]
public DocumentType Type { get; set; }
或者这不管用?如果没有,在当前场景中,我不确定是否有解决方案。以大写形式定义
DocumentType
枚举的值,或者使用标准适配器属性技巧:
[Description ("The sharepoint's document type.")]
[XmlIgnore]
public DocumentType Type { get; set; }
[Browsable (false)]
[XmlAttribute ("type")]
public string TypeXml
{
get { return Type.ToString ().ToUpperInvariant () ; }
set { Type = (DocumentType) Enum.Parse (typeof (DocumentType), value, true) ; }
}
对于属性,您也可以简单地计算“伪造枚举” 这适用于XML序列化和反序列化。 序列化使用主定义,而反序列化可以同时使用两者。 它有一些副作用,特别是当或如果您通过Enum.Values或类似方法枚举时。
但是如果你知道你在做什么,它是有效的你能完整地发布错误吗?此外,在发布代码时,如果您使用101010小按钮来正确格式化代码也是很好的。@Banang:修复了formatting@Merlyn摩根·格雷厄姆:谢谢@Mehendra babu,在没有看到错误的情况下,很难知道出了什么问题,但我认为这可能是名称空间冲突(这里的名称“Type”感觉像是一个可能的罪犯)。您的问题不清楚,因为属性的值有大小写问题。+1,因为XML区分大小写。没有完全回答问题(如何回答),但会引导询问者找到正确的解决方案。@Merlyn,对不起,我意识到是在编辑过程中。同时,您也编辑了这个问题,因此现在可以看到更多的原始代码(在示例XML文档没有显示的时候),我讨厌人们否决投票,不要评论,这样我就可以修复它=PWon这不是只对属性值有效吗(即
type=“grandad”
)?它是否也适用于属性名称(即tYpE=“GrandDad”
)?完整的示例是什么样子的?
[Description ("The sharepoint's document type.")]
[XmlIgnore]
public DocumentType Type { get; set; }
[Browsable (false)]
[XmlAttribute ("type")]
public string TypeXml
{
get { return Type.ToString ().ToUpperInvariant () ; }
set { Type = (DocumentType) Enum.Parse (typeof (DocumentType), value, true) ; }
}
public enum RelativeType
{
Mum,
Dad,
Son,
GrandDad,
// ReSharper disable InconsistentNaming
MUM = Mum,
DAD = Dad,
SON = Son,
GRANDDAD = GrandDad
// ReSharper restore InconsistentNaming
}