xmlns = "http://schemas.datacontract.org/2004/07/dto.MyModels" - это то, что я хотел бы удалить!
"d3p1" - это не то, с чем я столкнулся, когда создание XML. Можно ли как-нибудь удалить его?
Атрибуты:
оба XML объявления пространства имен . Первый устанавливает пространство имен XML по умолчанию для вашего документа XML; второй объявляет пространство имен, к которому принадлежат все дочерние элементы с предваряющим d3p1:
.
Из выбранного пространства имен c очевидно, что вы используете DataContractSerializer
для XML сериализации. Этот сериализатор назначает XML пространства имен в соответствии с правилами, описанными в Имена контрактов данных: пространства имен контрактов данных
По умолчанию любое данное пространство имен CLR (в формат Clr.Namespace) сопоставляется с пространством имен http://schemas.datacontract.org/2004/07/Clr.Namespace.. Чтобы переопределить это значение по умолчанию, примените атрибут ContractNamespaceAttribute ко всему модулю или сборке. В качестве альтернативы, для управления пространством имен контракта данных для каждого типа, установите свойство Пространство имен DataContractAttribute .
Поскольку вы не хотите XML Пространство имен для любого из ваших типов, первый вариант может показаться самым простым: применить следующие атрибуты к вашей сборке:
[assembly: ContractNamespaceAttribute("", ClrNamespace = "dto.MyModels")]
[assembly: ContractNamespaceAttribute("", ClrNamespace = "dto.MyModels.Shared")]
[assembly: ContractNamespaceAttribute("", ClrNamespace = "dto.Models.Android.Shared")]
В качестве альтернативы, вы можете применить атрибуты контракта данных к Ваши типы:
[DataContract(Name = "Book", Namespace = "")]
public class Book
{
[DataMember]
public string bookname { get; set; }
[DataMember]
public string serial { get; set; }
[DataMember]
public int id { get; set; }
}
Обратите внимание, что сериализация контракта данных opt-in , поэтому вам нужно будет применить [DataMember]
к каждому члену, который будет сериализован.
В качестве последней альтернативы вы можете переключиться на использование XmlSerializer
, которое не имеет пространства имен по умолчанию XML. Для этого вам нужно будет применить [XmlSerializerFormat]
к вашему контракту на обслуживание, как показано в Ручное переключение на XmlSerializer .
<error i:nil="true" />
всплывает, когда что-то ноль. Можно ли просто быть или не отображаться, когда оно пустое?
Эти нулевые элементы можно удалить, установив DataMemberAttribute.EmitDefaultValue
в элементах данных ссылочного типа как показано в этот ответ до Можно ли настроить DataContractSerializer так, чтобы он не создавал необязательные (т. е. Nullable <> и List <>) элементы в выходных данных XML? с помощью Даррен Кларк :
[DataContract(Name = "Book", Namespace = "")]
public class Book
{
[DataMember(EmitDefaultValue = false)]
public string bookname { get; set; }
[DataMember(EmitDefaultValue = false)]
public string serial { get; set; }
[DataMember]
public int id { get; set; }
}
В качестве альтернативы вы можете переключиться на XmlSerializer
, который не выводит нулевые эталонные значения по умолчанию.