2010-10-20 143 views
11

我有哪裏 不區分大小寫反序列化

我們已經定義的類序列化或反序列化XML的XML文件。

當我們反序列化,如果XML包含像下面其中「 type」屬性是在上部的情況下,像有其投擲的錯誤是在XML(2,2)這樣的錯誤。

<document text="BlankPDF" name="BlankPDF" type="PDF" path="" /> 

...

[DescriptionAttribute("The sharepoint's document type.")] 
[XmlAttribute("type")] 
public DocumentType Type 
{ 
    get; 
    set; 
} 

public enum DocumentType 
{ 
    pdf, 
    ppt, 
    pptx, 
    doc, 
    docx, 
    xlsx, 
    xls, 
    txt, 
    jpg, 
    bmp, 
    jpeg, 
    tiff, 
    icon 
} 

這就是我們如何定義的屬性。

在反序列化XML時是否可以忽略大小寫?

+0

請問你可以發佈錯誤的完整?另外,在發佈代碼時,如果使用小101010按鈕進行正確格式化,那就太好了。 – 2010-10-20 07:04:49

+0

@Banang:修復格式 – 2010-10-20 07:07:06

+0

@Merlyn Morgan-Graham:謝謝! – 2010-10-20 07:08:31

回答

2

我認爲簡短的答案是否定的,您不能忽略XmlAttributes中的大小寫,因爲它們區分大小寫(請參閱此article)。這意味着如果您的文檔以混合大小寫形式出現,您將遇到很多問題(這是其中一個)。

如果所有文檔屬性名稱類型被存儲在大寫你能不能只是改變XmlAttribute,以反映它是如何被存儲,所以將該行更改爲:

[DescriptionAttribute("The sharepoint's document type.")] [XmlAttribute("**TYPE**")] 
public DocumentType Type { get; set; } 

或者那不行嗎?如果沒有,在目前的情況下,我不確定是否有解決方案。

+0

+1,因爲XML區分大小寫。沒有完全回答這個問題(如何),但是確實將問題指向了正確的解決方案。 – 2010-10-20 07:08:51

+0

@Merlyn,對不起,我意識到這是在編輯中。同時你也編輯了這個問題,所以現在可以看到更多的原始代碼(在示例XML文檔甚至沒有顯示的時候) – 2010-10-20 07:10:51

+0

-1的任何原因? – 2010-10-20 07:12:36

7

定義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) ; } 
} 
6

對於屬性也可以評價僅僅是「僞造的枚舉」

public enum RelativeType 
    {   
     Mum, 
     Dad, 
     Son, 
     GrandDad, 
// ReSharper disable InconsistentNaming 
     MUM = Mum, 
     DAD = Dad, 
     SON = Son, 
     GRANDDAD = GrandDad 
// ReSharper restore InconsistentNaming 
    } 

該作品在XML序列化和反序列化中。 序列化使用主要定義,而反序列化可以同時使用兩者。 它有一些副作用,特別是當你通過Enum.Values或類似枚舉。 但是,如果你知道你在做什麼,它是有效的

+2

這不只適用於屬性值(即'''=類型=「GRANDDAD」')?它是否也適用於屬性名稱(即'tYpE =「GrandDad」')?完整的示例是什麼樣的? – bzlm 2014-03-07 10:04:26

+0

這是一個很聰明的把戲! – Literal 2014-05-14 21:45:34