簡體   English   中英

動態更改Xml元素名稱?

[英]Changing Xml Element Name Dynamically?

我正在嘗試根據序列化過程中的規則更改Xml元素名稱。

當然,我可以手動添加ElementName屬性,但是我的類中有1000多個屬性需要序列化。

除此之外,我不想更改所有屬性名稱,而只更改其中一些不具有Xml ElementName屬性的屬性名稱。

例如 ;

public class ToBeSerialized()
{
public string FirstName {get;set;}
public string LastName {get;set;}

[XmlElement(ElementName = "MyHome")]
public string Home {get;set;}

}

我的命名約定沒有ElementName屬性。

public string ChangeName(string item)
{
   if (!propName.Any(p => char.IsLower(p)))
            {
                return propName;
            }

            var builder = new StringBuilder();

            for (int i = 0; i < propName.Length; i++)
            {
                if (i != 0 && char.IsUpper(propName[i]))
                {
                    builder.Append("_");
                }

                builder.Append(propName[i].ToString().ToUpper(new CultureInfo("en-US", false)));
            }

            return builder.ToString();
}

所需的Xml

<ToBeSerialized First_Name="Name" Last_Name="Surname" MyHome="Mine" />

這是我的解決方案。 遍歷對象屬性檢查它是否已經具有XmlElementAttribute和ElementName。

如果是這樣,請不要更改其名稱,否則請更改其名稱。

foreach (var prop in myObject.GetType().GetProperties())
            {
                var attribute = Attribute.GetCustomAttribute(prop, typeof(XmlElementAttribute)) as XmlElementAttribute;


                    XmlElementAttribute myElementAttribute = new XmlElementAttribute();
                    XmlAttributes myAttributes = new XmlAttributes();
                    if (attribute==null||attribute.ElementName.IsNullOrEmpty())
                    {
                        myElementAttribute.ElementName = prop.Name.NameToUpper();
                    }
                    if (prop.PropertyType == typeof(string))
                    {
                        myElementAttribute.IsNullable = true;
                    }
                    myAttributes.XmlElements.Add(myElementAttribute);
                    myOverrides.Add(typeof(myObject), prop.Name, myAttributes);
       }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM