为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 ElementName 而不是属性名称序列化对象?

如何使用 ElementName 而不是属性名称序列化对象?

C#
蝴蝶刀刀 2021-11-14 15:40:10
我在使用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; }

}


查看完整回答
反对 回复 2021-11-14
?
呼唤远方

TA贡献1856条经验 获得超11个赞

这应该对你有用,


[XmlRoot("customer")]

public class Customer

{

    [XmlElement("name")]

    public string Name { get; set; }

    [XmlElement("address")]

    public string Address { get; set; }

}


查看完整回答
反对 回复 2021-11-14
  • 2 回答
  • 0 关注
  • 196 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信