gpt4 book ai didi

c# - 有没有办法让 DataContractSerializer 输出更清晰的 XML?

转载 作者:可可西里 更新时间:2023-11-01 08:42:18 26 4
gpt4 key购买 nike

使用 DataContractSerializer 序列化我的对象我得到类似于

的输出
 <?xml version="1.0" encoding="utf-8" ?> 
<AgentNotification xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/The.name.space.Notifications">
<_x003C_Created_x003E_k__BackingField i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/The.name.space" />
<_x003C_Id_x003E_k__BackingField i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/The.name.space" />
<_x003C_Email_x003E_k__BackingField>some@email.com</_x003C_Email_x003E_k__BackingField>
<_x003C_Name_x003E_k__BackingField>Random Person</_x003C_Name_x003E_k__BackingField>
<_x003C_Policies_x003E_k__BackingField>
<PolicyNotification>
<_x003C_Created_x003E_k__BackingField i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/The.name.space" />
<_x003C_Id_x003E_k__BackingField i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/The.name.space" />
<_x003C_ConfirmationNumber_x003E_k__BackingField>Some number</_x003C_ConfirmationNumber_x003E_k__BackingField>
</PolicyNotification>
<PolicyNotification>
</_x003C_Policies_x003E_k__BackingField>
</AgentNotification>

有什么办法让它输出的标签只是

<Id>
<Name>

等等,而不需要用属性覆盖我的类?

如果没有办法保证每次的输出都一样,对吗?因此,如果我使用它来呈现我的对象图是 XML 以与用于文件生成的 X* 文档混搭,我将永远不会遇到我的节点更改名称并且文档变成空白的问题,对吗?

最佳答案

发生这种情况是因为您必须使用 [Serializable] 标记您的类型(例如 AgentNotification) .当 DataContractSerializer 遇到标记为 [Serializable] 但没有显式 [DataContract] 的类型时, 它会生成一个 default contract对于与 BinaryFormatter 匹配的类型序列化一个类,就是序列化all member variables of a class — even variables marked as private - 按名字。对于 auto-implemented properties ,这意味着 secret backing fields按名称序列化;它们的名称是您看到的特殊元素名称。

解决此问题的最简单方法是从类中删除 [Serializable] 属性。你几乎肯定不需要它,除非你实际使用 BinaryFormatterSoapFormatter .这样做之后,DataContractSerializer 现在将按名称序列化您的公共(public)属性和字段,而不是按名称序列化公共(public)和私有(private)字段。

关于c# - 有没有办法让 DataContractSerializer 输出更清晰的 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1953984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com