我在使用DataContractSerializer. 我面臨的問題是生成的 XML 文件總是具有為類和字段定義名稱的標簽,而不是在XmlRoot或XmlElement使用ElementName屬性中設(shè)置的名稱。例如對于定義如下的類:[XmlRoot(ElementName = "customer")]public class Customer{ [XmlElement(ElementName = "name")] public string Name { get; set; } [XmlElement(ElementName = "address")] public string Address { get; set; }}在我的情況下生成的 XML 總是:<Customer> <Name>abc</Name> <Address>xyz</Address></Customer>而我希望得到的輸出是ElementName小寫的輸出:<customer> <name>abc</name> <address>xyz</address></customer>我正在使用擴展方法通過 C# 對象使用以下方法進行序列化:public static XDocument SerializeToXElement(object o){ XDocument doc = new XDocument(); using (var writer = doc.CreateWriter()) { var serializer = new DataContractSerializer(o.GetType()); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); serializer.WriteObject(writer, o); } doc.StripNamespace(); return doc;}我的序列化函數(shù)中還調(diào)用了另一個擴展方法來從 my 中去除命名空間XDocument,如下所示:public static void StripNamespace(this XDocument document){ if (document.Root == null) return; foreach (var element in document.Root.DescendantsAndSelf()) { element.Name = element.Name.LocalName; element.ReplaceAttributes(GetAttributesWithoutNamespace(element)); }}我該怎么做才能使 DataContractSerializer 使用ElementName而不是類/屬性名稱?
2 回答

蝴蝶不菲
TA貢獻1810條經(jīng)驗 獲得超4個贊
根據(jù)我的評論,您應(yīng)該使用 DataContract 和 DataMember 屬性而不是XmlRootand XmlElement:
[DataContract(Name = "customer", Namespace = "")]
public class Customer
{
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "address")]
public string Address { get; set; }
}

呼喚遠方
TA貢獻1856條經(jīng)驗 獲得超11個贊
這應(yīng)該對你有用,
[XmlRoot("customer")]
public class Customer
{
[XmlElement("name")]
public string Name { get; set; }
[XmlElement("address")]
public string Address { get; set; }
}
- 2 回答
- 0 關(guān)注
- 226 瀏覽
添加回答
舉報
0/150
提交
取消