我在使用DataContractSerializer. 我面临的问题是生成的 XML 文件总是具有为类和字段定义名称的标签,而不是在XmlRoot或XmlElement使用ElementName属性中设置的名称。例如对于定义如下的类:[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;}我的序列化函数中还调用了另一个扩展方法来从 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条经验 获得超4个赞
根据我的评论,您应该使用 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条经验 获得超11个赞
这应该对你有用,
[XmlRoot("customer")]
public class Customer
{
[XmlElement("name")]
public string Name { get; set; }
[XmlElement("address")]
public string Address { get; set; }
}
- 2 回答
- 0 关注
- 196 浏览
添加回答
举报
0/150
提交
取消