Существует ли способ сделать выходной инструмент для очистки DataContractSerializer XML?

Используя 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* документ для поколения файла, что я никогда не буду сталкиваться с проблемой, где мои узлы меняют имена, и документ выходит корректный пробел?

11
задан Chris Marisic 23 December 2009 в 16:55
поделиться

2 ответа

DataContractSerializer сериализует либо все общедоступные свойства (если вы ничего не укажете - возможно, начиная с .NET 3.5 SP1), либо (подход, который я предпочитаю) вы помечаете атрибут [DataMember].

Лучшее, что вы можете сделать, - это пометить свой класс атрибутом [DataContract] и всеми членами (свойства, поля и т. д.), которые вы действительно хотите в вашем контракте данных с атрибутом [DataMember] .

DataContractSerializer на самом деле не позволяет намного больше контроля, чем это - вы можете определить довольно четко (используя этот явный подход "opt-in") то, что сериализуется, но у вас мало или совсем нет контроля над , как он сериализуется.

Но действительно ли вам это нужно? ДЕЙСТВИТЕЛЬНО?

Если да, то вы '

1
ответ дан 3 December 2019 в 08:04
поделиться

Длинные имена элементов (например, _x003C_Created_x003E_k__BackingField) создаются .NET при использовании автосвойств.

Если вы измените их на свойства с опорными полями, то вместо них будут использоваться имена ваших опорных полей. Это можно сделать без добавления каких-либо атрибутов в код.

(Кроме того, простое добавление атрибута [DataContract] к определению вашего класса приведет ваш XML в порядок - хотя и не полностью)

.
5
ответ дан 3 December 2019 в 08:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: