Я создал файл класса C#, используя XSD-файл в качестве входных данных. Одно из моих свойств выглядит так:
private System.DateTime timeField;
[System.Xml.Serialization.XmlElementAttribute(DataType = "time")]
public System.DateTime Time {
get {
return this.timeField;
}
set {
this.timeField = value;
}
}
После сериализации содержимое файла теперь выглядит так:
<Time>14:04:02.1661975+02:00</Time>
Возможно ли с XmlAttributes в свойстве, чтобы он отображался без миллисекунд и такого значения GMT?
<Time>14:04:02</Time>
Возможно ли это, или мне нужно собрать какой-то xsl / xpath-replace-magic после того, как класс был сериализован?
Это не решение для изменения объекта на String, потому что он используется как DateTime в остальной части приложения и позволяет нам создавать xml-представление из объекта с помощью метода XmlSerializer.Serialize ().
Причина, по которой мне нужно удалить дополнительную информацию из поля, заключается в том, что принимающая система не соответствует стандартам w3c для типа данных time.





Вы можете создать строковое свойство, которое выполняет перевод в / из вашего поля timeField и поместить в него атрибут сериализации вместо реального свойства DateTime, которое использует остальная часть приложения.
Сегодня пришлось сделать то же самое :)
Будет ли это работать, если позже нам понадобится десериализовать тот же файл?
Вот как я это решил. Я мог принять оба ответа, но Джеффри был первым. Лучшее, что я могу сделать, это проголосовать за :)
Если ваш XSD не изменится, я думаю, что это самое простое решение.
Поместите [XmlIgnore] в свойство Time.
Затем добавьте новое свойство:
[XmlElement(DataType = "string",ElementName = "Time")]
public String TimeString
{
get { return this.timeField.ToString("yyyy-MM-dd"); }
set { this.timeField = DateTime.ParseExact(value, "yyyy-MM-dd", CultureInfo.InvariantCulture); }
}
"yyyy-MM-dd" - правильная строка формата для поля времени? Хотя это решение не сработало для меня из коробки, оно привело меня к тому, что сработало. Мне пришлось использовать "HH:mm:ss", и я получил от моего dateField, как этот get { return this.dateField.ToString("HH:mm:ss"); }
То же самое и с типом данных Uri. Это была моя проблема, и вот как я ее исправил. [JsonIgnore] [XmlIgnore] общедоступный Uri UrlIgnore {получить; набор; } [JsonProperty ("url")] [XmlElement] общедоступная строка Url {get {return Convert.ToString (UrlIgnore); } установить {UrlIgnore = новый Uri (значение); }}
Посмотрите на stackoverflow.com/questions/3534525/…