Используя 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* документ для поколения файла, что я никогда не буду сталкиваться с проблемой, где мои узлы меняют имена, и документ выходит корректный пробел?
DataContractSerializer
сериализует либо все общедоступные свойства (если вы ничего не укажете - возможно, начиная с .NET 3.5 SP1), либо (подход, который я предпочитаю) вы помечаете атрибут [DataMember].
Лучшее, что вы можете сделать, - это пометить свой класс атрибутом [DataContract]
и всеми членами (свойства, поля и т. д.), которые вы действительно хотите в вашем контракте данных с атрибутом [DataMember]
.
DataContractSerializer на самом деле не позволяет намного больше контроля, чем это - вы можете определить довольно четко (используя этот явный подход "opt-in") то, что сериализуется, но у вас мало или совсем нет контроля над , как он сериализуется.
Но действительно ли вам это нужно? ДЕЙСТВИТЕЛЬНО?
Если да, то вы '
Длинные имена элементов (например, _x003C_Created_x003E_k__BackingField) создаются .NET при использовании автосвойств.
Если вы измените их на свойства с опорными полями, то вместо них будут использоваться имена ваших опорных полей. Это можно сделать без добавления каких-либо атрибутов в код.
(Кроме того, простое добавление атрибута [DataContract] к определению вашего класса приведет ваш XML в порядок - хотя и не полностью)
.