XmlSerializer가 DateTime을 'YYYY-MM-DD hh : mm : ss'로 지정 화합니다.
일부 RESTful 서비스에 대한 XSD 스키마가 있습니다. xsd.exe
도구 와 함께 C # 코드를 xs:date
생성하는 경우 XSD 는 다음 코드를 생성합니다.
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType="date")]
public System.DateTime time {
get {
return this.timeField;
}
set {
this.timeField = value;
}
}
XML을 객체로 deserialize 할 때 XmlSerializer
모두를 사용 하는 것이 좋습니다. 내가 직면 한 한 문제는 서비스가 날짜가 형식화 될 것으로 예상 YYYY-MM-DD hh:mm:ss
하고 XSD 생성 코드가 YYYY-MM-DD
.
XSD를 수동으로 수정하여 xs:dateTime
입력하면 생성 된 C # 코드에서 2010-08-20T20:07:03.915039Z
.
기본적으로 구성 화를 생성 YYYY-MM-DD hh:mm:ss
해야합니까? XSD에 할 일이 또는 생성 된 C # 코드를 변경하기 위해 할 수있는 일이 있습니까?
과거에는 datetime을 제어하기 위해 다음을 수행했습니다.
- DateTime 속성을 무시하십시오.
- 내가 원하는 방식으로 생성 화 / 탈 렬화하는 더미 속성을 만듭니다.
다음은 그 예입니다.
public class SomeClass
{
[XmlIgnore]
public DateTime SomeDate { get; set; }
[XmlElement("SomeDate")]
public string SomeDateString
{
get { return this.SomeDate.ToString("yyyy-MM-dd HH:mm:ss"); }
set { this.SomeDate = DateTime.Parse(value); }
}
}
사용 [XmlElement(DataType = "date")]
속성은 서식을 필요 DateTime
로하는 속성 값을 사용합니다.
MSDN에서 :
참고 :
publicationdate 필드에 주석을 추가하는 속성에는 DataType 속성이 있습니다. .NET Framework에는 xs : date 유형과 완전히 일치하는 유형이 없습니다. 가장 가까운 일치 항목은 날짜 및 시간 데이터를 저장하는 System.DateTime입니다. DataType 속성을 "날짜"로 지정하면 XmlSerializer가 DateTime 개체의 날짜 부분 만화됩니다.
IXmlSerializable
인터페이스 구현 이 트릭을 할 생각 믿습니다 . 그런 다음 개체를 생성하고 역으로 개체화하는 방법을 제어 할 수 있습니다.
밀리 초 부분 만 지울 필요가있는 경우. 인용하다 :
그리고 기본적으로 다음과 같이하십시오.
startDateTimeToUse = startDateTimeToUse.AddTicks(-(startDateTimeToUse.Ticks % TimeSpan.TicksPerSecond));
endDate = endDate.AddTicks(-(endDate.Ticks % TimeSpan.TicksPerSecond));
이것이 다음과 같이 확인 가능합니다.
<startDate>2015-10-31T12:13:04</startDate>
<endDate>2016-11-10T12:13:06</endDate>
또한 밀리 초를 지우기 전에 다음을 수행하고 있음을 명시해야합니다 .
var startDateTimeToUse = ssStartDateTime.ToUniversalTime();
var endDate = DateTime.Now.ToUniversalTime();
startDateTimeToUse = DateTime.SpecifyKind(startDateTimeToUse, DateTimeKind.Unspecified);
endDate = DateTime.SpecifyKind(endDate, DateTimeKind.Unspecified);
이 시점에서 어떤 화에 영향을 미치는지 여부를 모르겠습니다.
위의 답변을 참조하지만 추가 비용 값이 null이 아닐 때만 출력을 원하면 (예 : XML maxOccurs = 0) 다음과 같이 행동 할 수 있습니다.
private System.DateTime? someDateField;
public string someDate
{
get
{
return someDateField?.ToString("MM-dd-yyyy");
}
set
{
dobField = System.DateTime.Parse(value);
}
}
'ProgramingTip' 카테고리의 다른 글
Jupyter 노트북은 판다 테이블 2 개를 나란히 표시합니다. (0) | 2020.11.19 |
---|---|
Angular 6 마이그레이션 -.angular-cli.json에서 angular.json으로 (0) | 2020.11.19 |
Python : 목록의 모든 항목이 동일한 항목인지 확인 (0) | 2020.11.19 |
`database.yml` 파일 내의 환경 변수에 액세스하지 못함 (0) | 2020.11.19 |
Cloudfront custom-origin 배포가 502 "오류 요청을받을 수 없습니다."를 반환합니다. (0) | 2020.11.19 |