C# 不区分大小写的反序列化

C# 不区分大小写的反序列化,c#,C#,我有一个XML文件,其中 我们定义了用于序列化或反序列化XML的类 当我们进行反序列化时,如果XML包含如下内容,其中“type”属性是大写的,那么它的抛出错误就像XML(2,2)中有这样的错误一样 <document text="BlankPDF" name="BlankPDF" type="PDF" path="" /> 这就是我们定义属性的方式 反序列化XML时可以忽略大小写吗?我认为简单的答案是否定的,您不能忽略XmlAttributes中的大小写,因为它们区分大小写(请

我有一个XML文件,其中

我们定义了用于序列化或反序列化XML的类

当我们进行反序列化时,如果XML包含如下内容,其中“type”属性是大写的,那么它的抛出错误就像XML(2,2)中有这样的错误一样

<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
    }