제네릭 형식의 XmlElement 이름을 사용한 XML 직렬화-C #

셰이 루가시

XML Serialization에 사용할 일반 클래스를 만들려고합니다. 제네릭 객체 T를 보유하는 데 사용하는 속성을 'Message'라고하지만이 속성의 생성 된 XML 노드의 이름을 ElementType 클래스에 표기된대로 지정하고 싶습니다.

예:

public class MessageWrapper<T>where T : class
{
    [XmlElement]
    public T Message { get; set; }
}

내가 Message 속성에 보유하고 싶은 객체 클래스-

[XmlType("Connect"), Serializable]
public class ConnectMessage
{
    [XmlElement("Machine_Name")]
    public string MachineName { get; set; }

    [XmlElement("Application_Name")]
    public string AppName { get; set; }
}

이제 출력 XML은 다음과 같습니다.

<Message xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Message_ID>1</Message_ID>
  <Message>
    <Machine_Name>WS-8193</Machine_Name>
    <Application_Name>TestApplication</Application_Name>
  </Message>
</Message>

대신 :

<Message xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Message_ID>1</Message_ID>
  <Connect>
    <Machine_Name>WS-8193</Machine_Name>
    <Application_Name>TestApplication</Application_Name>
  </Connect>
</Message>

가능합니까?

andrei.ciprian

일반적인 접근 방식 옆에 공장 접근 방식이 있습니다. 어느 쪽이든 의존해야합니다 XmlAttributeOverrides.

public interface IMessage {}
public class AbstractMessage : IMessage { }
// your generic
public class MessageWrapper<T> where T : IMessage { public T Message { get; set; } }
// my factory
[XmlInclude(typeof(ConnectMessage))]
public class MessageWrapper { public AbstractMessage Message { get; set; } }
// overrides
public static class MessageWrapperTester {
    public static XmlAttributeOverrides XmlOverrides {
        get {
            var xmlOverrides = new XmlAttributeOverrides(); 
            var attr = new XmlAttributes();
            attr.XmlElements.Add(new XmlElementAttribute("Connect", typeof(ConnectMessage)));
            xmlOverrides.Add(typeof(MessageWrapper), "Message", attr);
            xmlOverrides.Add(typeof(MessageWrapper<>), "Message", attr);
            xmlOverrides.Add(typeof(MessageWrapper<ConnectMessage>), "Message", attr);
            return xmlOverrides;
        } } }
// use it like, generic 1st, factory 2nd:
var srlz = new XmlSerializer(typeof(MessageWrapper<ConnectMessage>), MessageWrapperTester.XmlOverrides);
var srlz = new XmlSerializer(typeof(MessageWrapper), MessageWrapperTester.XmlOverrides);

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

제네릭 형식의 XmlElement 이름을 사용한 XML 직렬화-C #

분류에서Dev

C #의 XmlSerializer, 특정 특성으로 동일한 이름을 가진 여러 XmlElement로 장식 된 클래스를 역 직렬화 하시겠습니까?

분류에서Dev

알 수없는 형식의 DataContractSerializer를 사용한 C # xml 역 직렬화

분류에서Dev

Java Bean 직렬화의 이름 및 형식에 대한 제어?

분류에서Dev

제네릭을 사용한 C # 형식 안전 복제

분류에서Dev

C #에서 사용자 지정 직렬화를 사용할 때 XML 요소의 이름을 어떻게 제어 할 수 있습니까?

분류에서Dev

형식에 대한 제약 조건이있는 제네릭의 C # 이름

분류에서Dev

XML 직렬화-XML의 일부를 XmlElement로 유지

분류에서Dev

태그가없는 C # XML 직렬화 XMLElement

분류에서Dev

자식 개체 및 형제 개체에서 개체 이름이 동일한 XML Serializer를 사용하여 개체를 직렬화 할 수 없습니다.

분류에서Dev

C #의 이중 제네릭 형식

분류에서Dev

C #에서 형식 이름이 다른 XML 요소 역 직렬화

분류에서Dev

네임 스페이스, xml 정의 등을 제거하는 XML로 직렬화

분류에서Dev

XML 직렬화 C #을 사용하여 XML에서 구조로

분류에서Dev

제네릭을 사용한 C # 8 nullable 참조 형식 처리의 일관성없는 동작

분류에서Dev

제네릭 형식을 사용하는 C # 람다 쿼리

분류에서Dev

C #에서 제네릭 형식을 매개 변수로 사용

분류에서Dev

제네릭 형식의 정확한 형식 제약 조건-C #

분류에서Dev

XML 직렬화 오류에 대한 요소 이름 제공

분류에서Dev

여러 네임 스페이스를 사용한 XML 역 직렬화

분류에서Dev

특성을 사용하여 XML 역 직렬화 C # 배열

분류에서Dev

이 C # XML 역 직렬화 코드의 문제점은 무엇입니까?

분류에서Dev

제네릭을 사용한 람다 식

분류에서Dev

어떻게 런타임에 정의 된 노드 이름을 사용하여 XML에 배열을 직렬화?

분류에서Dev

C # Xml 역 직렬화, XML의 데이터 무시

분류에서Dev

c # XML 직렬화 : 네임 스페이스 선언 순서

분류에서Dev

직렬화를 위해 C # 특성을 사용하여 xml 요소에 친숙한 이름 특성을 추가 하시겠습니까?

분류에서Dev

XML-직렬화 된 개체의 키를 사용하여 값을 가져 오는 C # 일반 메서드

분류에서Dev

포함 된 형식을 사용한 역 직렬화 JSON

Related 관련 기사

  1. 1

    제네릭 형식의 XmlElement 이름을 사용한 XML 직렬화-C #

  2. 2

    C #의 XmlSerializer, 특정 특성으로 동일한 이름을 가진 여러 XmlElement로 장식 된 클래스를 역 직렬화 하시겠습니까?

  3. 3

    알 수없는 형식의 DataContractSerializer를 사용한 C # xml 역 직렬화

  4. 4

    Java Bean 직렬화의 이름 및 형식에 대한 제어?

  5. 5

    제네릭을 사용한 C # 형식 안전 복제

  6. 6

    C #에서 사용자 지정 직렬화를 사용할 때 XML 요소의 이름을 어떻게 제어 할 수 있습니까?

  7. 7

    형식에 대한 제약 조건이있는 제네릭의 C # 이름

  8. 8

    XML 직렬화-XML의 일부를 XmlElement로 유지

  9. 9

    태그가없는 C # XML 직렬화 XMLElement

  10. 10

    자식 개체 및 형제 개체에서 개체 이름이 동일한 XML Serializer를 사용하여 개체를 직렬화 할 수 없습니다.

  11. 11

    C #의 이중 제네릭 형식

  12. 12

    C #에서 형식 이름이 다른 XML 요소 역 직렬화

  13. 13

    네임 스페이스, xml 정의 등을 제거하는 XML로 직렬화

  14. 14

    XML 직렬화 C #을 사용하여 XML에서 구조로

  15. 15

    제네릭을 사용한 C # 8 nullable 참조 형식 처리의 일관성없는 동작

  16. 16

    제네릭 형식을 사용하는 C # 람다 쿼리

  17. 17

    C #에서 제네릭 형식을 매개 변수로 사용

  18. 18

    제네릭 형식의 정확한 형식 제약 조건-C #

  19. 19

    XML 직렬화 오류에 대한 요소 이름 제공

  20. 20

    여러 네임 스페이스를 사용한 XML 역 직렬화

  21. 21

    특성을 사용하여 XML 역 직렬화 C # 배열

  22. 22

    이 C # XML 역 직렬화 코드의 문제점은 무엇입니까?

  23. 23

    제네릭을 사용한 람다 식

  24. 24

    어떻게 런타임에 정의 된 노드 이름을 사용하여 XML에 배열을 직렬화?

  25. 25

    C # Xml 역 직렬화, XML의 데이터 무시

  26. 26

    c # XML 직렬화 : 네임 스페이스 선언 순서

  27. 27

    직렬화를 위해 C # 특성을 사용하여 xml 요소에 친숙한 이름 특성을 추가 하시겠습니까?

  28. 28

    XML-직렬화 된 개체의 키를 사용하여 값을 가져 오는 C # 일반 메서드

  29. 29

    포함 된 형식을 사용한 역 직렬화 JSON

뜨겁다태그

보관