子类的C#XML序列化-从根节点删除xmlns:p1和p1:type属性

李文斯

使用沼泽标准的System.Xml.Serialization.XmlSerializer,我可以序列化一个对象,该对象的类从另一个继承。检查生成的XML,为根节点赋予属性“ p1:type”和“ xmlns:p1”:

<ApiSubmission ApiVersion="1" CustId="100104" p1:type="OrderConfirmationApiSubmission" 
    xmlns:p1="http://www.w3.org/2001/XMLSchema-instance">
    ...
</ApiSubmission>

有没有删除这些属性的好方法?

米切尔

因此,在最初提出这个问题的5年后,我遇到了同样的问题,对于没有人回答我感到失望。搜索后,我将一些东西拼凑在一起,这使我可以删除派生类中的type属性。

    internal static string SerializeObject(object objectToSerialize, bool OmitXmlDeclaration = true, System.Type type = null, bool OmitType = false, bool RemoveAllNamespaces = true)
    {
        XmlSerializer x;
        string output;

        if (type != null)
        {
            x = new XmlSerializer(type);
        }
        else
        {
            x = new XmlSerializer(objectToSerialize.GetType());
        }

        XmlWriterSettings settings = new XmlWriterSettings() { Indent = false, OmitXmlDeclaration = OmitXmlDeclaration, NamespaceHandling = NamespaceHandling.OmitDuplicates };

        using (StringWriter swriter = new StringWriter())
        using (XmlWriter xmlwriter = XmlWriter.Create(swriter, settings))
        {
            x.Serialize(xmlwriter, objectToSerialize);

            output = swriter.ToString();
        }

        if (RemoveAllNamespaces || OmitType)
        {
            XDocument doc = XDocument.Parse(output);

            if (RemoveAllNamespaces)
            {
                foreach (var element in doc.Root.DescendantsAndSelf())
                {
                    element.Name = element.Name.LocalName;
                    element.ReplaceAttributes(GetAttributesWithoutNamespace(element));
                }
            }

            if (OmitType)
            {
                foreach (var node in doc.Descendants().Where(e => e.Attribute("type") != null))
                {
                    node.Attribute("type").Remove();
                }
            }

            output = doc.ToString();
        }

        return output;
    }

我使用这个,并在基类中使用[XmlInclude]派生类。然后是OmitType和RemoveAllNamespaces。从本质上讲,然后将派生类视为基类。

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

자식 클래스의 c # XML 직렬화-루트 노드에서 xmlns : p1 및 p1 : type 특성 제거

분류에서Dev

lenovo p1에 데비안 설치

분류에서Dev

Asus Strix keyboard only showing P1 P3 M and NKRO lights

분류에서Dev

p1 | p2를 실행하기위한 Bash 명령

분류에서Dev

Thinkpad P1에 Ubuntu 18.04 설치시 부팅 실패

분류에서Dev

`-p1` 등으로 루트 슬래시 제거

분류에서Dev

Azure SQL: Performance benchmarks between S0, S1, S2 tier and P1, P2, P3 Tiers?

분류에서Dev

필살기가 허용되는 그리드 게임-ZCO 2009, P1

분류에서Dev

도입 패턴 (p1 & ... & pn)의 예가 작동하지 않습니다.

분류에서Dev

Json编码或序列化XML

분류에서Dev

값이 p1과 p2에 있지만 p3에는 없는지 확인하십시오.

분류에서Dev

패치 할 때 인수 -p0과 -p1의 차이점은 무엇입니까?

분류에서Dev

P1 P3 M 및 NKRO 표시등 만 표시하는 Asus Strix 키보드

분류에서Dev

공유 요소 전환이 작동하지 않음-메서드 ActivityOptionsCompat.makeSceneTransitionAnimation (mContext, p1, p2);

분류에서Dev

p1의 기본값이 0으로 설정되고 매번 1 씩 증가하는 이유

분류에서Dev

readline에서 'Drunk'입력, 다른 프로그램에서 확인 (스마트 미터 P1 포트 읽기)

분류에서Dev

asp.net의 B2B SaaS 솔루션 용 SQL Azure S2 또는 P1

분류에서Dev

Ubuntu 18.04가 설치된 Lenovo P1의 Wi-Fi가 더 이상 작동하지 않습니다.

분류에서Dev

Azure SQL : S0, S1, S2 계층과 P1, P2, P3 계층 간의 성능 벤치 마크?

분류에서Dev

$ q.all (p1, p2) .then ()은 두 약속이 모두 해결되기 전에 실행되는 것으로 보입니다.

분류에서Dev

C#Json反序列化失败

분류에서Dev

Manjaro (Arch)를 사용하여 Lenovo P1 Gen 2에서 "신호음"을 비활성화하는 방법은 무엇입니까?

분류에서Dev

反序列化对象的Arraylist

분류에서Dev

foreach 루프 컨테이너를 사용하여 테이블에 새 열 만들기- " '@ P1'근처의 잘못된 구문"오류를 해결할 수 없음

분류에서Dev

C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

분류에서Dev

使用GSON自定义反序列化枚举

분류에서Dev

使用jdbc-message-channel的序列化错误

분류에서Dev

Могу ли я добавить теги <p> </p> вокруг текстового содержимого в элементах XML с помощью XSLT 1.0?

분류에서Dev

protobuf-net:回调,用于确定要序列化的对象

Related 관련 기사

  1. 1

    자식 클래스의 c # XML 직렬화-루트 노드에서 xmlns : p1 및 p1 : type 특성 제거

  2. 2

    lenovo p1에 데비안 설치

  3. 3

    Asus Strix keyboard only showing P1 P3 M and NKRO lights

  4. 4

    p1 | p2를 실행하기위한 Bash 명령

  5. 5

    Thinkpad P1에 Ubuntu 18.04 설치시 부팅 실패

  6. 6

    `-p1` 등으로 루트 슬래시 제거

  7. 7

    Azure SQL: Performance benchmarks between S0, S1, S2 tier and P1, P2, P3 Tiers?

  8. 8

    필살기가 허용되는 그리드 게임-ZCO 2009, P1

  9. 9

    도입 패턴 (p1 & ... & pn)의 예가 작동하지 않습니다.

  10. 10

    Json编码或序列化XML

  11. 11

    값이 p1과 p2에 있지만 p3에는 없는지 확인하십시오.

  12. 12

    패치 할 때 인수 -p0과 -p1의 차이점은 무엇입니까?

  13. 13

    P1 P3 M 및 NKRO 표시등 만 표시하는 Asus Strix 키보드

  14. 14

    공유 요소 전환이 작동하지 않음-메서드 ActivityOptionsCompat.makeSceneTransitionAnimation (mContext, p1, p2);

  15. 15

    p1의 기본값이 0으로 설정되고 매번 1 씩 증가하는 이유

  16. 16

    readline에서 'Drunk'입력, 다른 프로그램에서 확인 (스마트 미터 P1 포트 읽기)

  17. 17

    asp.net의 B2B SaaS 솔루션 용 SQL Azure S2 또는 P1

  18. 18

    Ubuntu 18.04가 설치된 Lenovo P1의 Wi-Fi가 더 이상 작동하지 않습니다.

  19. 19

    Azure SQL : S0, S1, S2 계층과 P1, P2, P3 계층 간의 성능 벤치 마크?

  20. 20

    $ q.all (p1, p2) .then ()은 두 약속이 모두 해결되기 전에 실행되는 것으로 보입니다.

  21. 21

    C#Json反序列化失败

  22. 22

    Manjaro (Arch)를 사용하여 Lenovo P1 Gen 2에서 "신호음"을 비활성화하는 방법은 무엇입니까?

  23. 23

    反序列化对象的Arraylist

  24. 24

    foreach 루프 컨테이너를 사용하여 테이블에 새 열 만들기- " '@ P1'근처의 잘못된 구문"오류를 해결할 수 없음

  25. 25

    C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

  26. 26

    使用GSON自定义反序列化枚举

  27. 27

    使用jdbc-message-channel的序列化错误

  28. 28

    Могу ли я добавить теги <p> </p> вокруг текстового содержимого в элементах XML с помощью XSLT 1.0?

  29. 29

    protobuf-net:回调,用于确定要序列化的对象

뜨겁다태그

보관