제네릭 클래스의 XML을 만들고 싶습니다. 속성 중 하나에 제네릭 형식이 있습니다. 이 속성의 경우 XML 요소 이름으로 속성 이름을 사용하지 않고 제네릭 형식의 이름을 사용합니다.C# : 제네릭 형식 이름의 XML 요소 이름을 갖는 가장 좋은 방법
클래스는 다음과 같습니다
[XmlRoot("Entity")]
public class StoreItem<TEntity>
where TEntity : class, new()
{
/// <summary>
/// Gets and sets the status of the entity when storing.
/// </summary>
[XmlAttribute]
public System.Data.Services.Client.EntityStates Status { get; set; }
/// <summary>
/// Gets and sets the entity to be stored.
/// </summary>
public TEntity Entity { get; set; }
}
는 XML 같은 것을 포함해야 종류 StoreItem<SewageArea>
의 저장 항목 직렬화 : 위의 예에서 SewageArea
을
<Entity Status="Deleted">
<SewageArea ...>
...
</SewageArea>
<Entity>
요구 사항은을 그 "보통"방식으로 직렬화되어야합니다. 또 다른 중요한 점은 해당 코드가 StoreItem
클래스에 새로 추가 된 속성을 자동으로 직렬화 할 준비가되어 있어야한다는 것입니다.
너무 쉽지 않습니다. [XML에 직렬화 할 때 클래스 이름 바꾸기] (https://stackoverflow.com/questions/36745144/rename-class-when-serializing-to-xml) 라인을 따라 뭔가를하고 싶지만 속성 인수 제네릭 형식 매개 변수를 포함 할 수 없습니다. 즉, [[XmlElement (typeof (TEntity))]'는 컴파일되지 않습니다. – dbc
나는 그것이 곧장 나아지지 않는다는 것을 안다. 나는 IXmlSerialisable 인터페이스를 구현하는 것에 대해 생각했지만 엔티티 객체의 "정상적인"직렬화와 다른 속성의 자동 직렬화를 수행 할 때 멈추었다. – scher