DaveCore
DaveCore

Reputation: 13

.Net Core XML remove wrapping tags for a list

I am currently trying to format an XML response to match a specific format and I am having issues with displaying tags I would prefer to hide.

So my current response is as follows:

            <ExportShipmentsResult>
                <dataExtract>
                    <DataExtract>
                        <shipment>
                            <ShipID>123456</ShipID>
                            <ShipNo>PSS111198</ShipNo>
                            <ShipDate>5 Dec 2011 14:44</ShipDate>
                            <CustCode>1111/1</CustCode>
                            <ShipSumm>SU</ShipSumm>
                            <PONumbers>por:0121</PONumbers>
                            <ShipComments />
                            <SuperUsers />
                            <OrderItem>
                                <orderItem>
                                    <Code>100001</Code>
                                    <Qty>1</Qty>
                                </orderItem>
                                <orderItem>
                                    <Code>100002</Code>
                                    <Qty>1</Qty>
                                </orderItem>
                            </OrderItem>
                        </shipment>
                    </DataExtract>
                </dataExtract>
            </ExportShipmentsResult>
        </ExportShipmentsResponse>

My Issue is I do not want the "Wrapping" tags to display, so taking OrderItem as and example, the result I would like is:

                            <SuperUsers />
                                <OrderItem>
                                    <Code>100001</Code>
                                    <Qty>1</Qty>
                                </OrderItem>
                                <OrderItem>
                                    <Code>100002</Code>
                                    <Qty>1</Qty>
                                </OrderItem>
                        </shipment>

I have OrderItem set up as a list and I am using the MessageContract(IsWrapped=false) but it doesnt appear to be working, no errors it is just ignored.

Model:

    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.magishop.com/")]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.magishop.com/", IsNullable = false)]
    [MessageContract]
    public partial class ExportShipmentsResponse
    {

        private string resultField;

        [MessageBodyMember]/// <remarks/>
        public List<dataExtract> ExportShipmentsResult { get; set; }
    }

    public class dataExtract
    {
        [MessageBodyMember]
        public List<shipment> DataExtract { get; set; }

    }

    public class shipment
    {
        [MessageBodyMember]
        public string ShipID { get; set; }
        [MessageBodyMember]
        public string ShipNo { get; set; }
        [MessageBodyMember]
        public string ShipDate { get; set; }
        [MessageBodyMember]
        public string CustCode { get; set; }
        [MessageBodyMember]
        public string ShipSumm { get; set; }
        [MessageBodyMember]
        public string PONumbers { get; set; }
        [MessageBodyMember]
        public string ShipComments { get; set; }
        [MessageBodyMember]
        public string SuperUsers { get; set; }
        [MessageBodyMember]
        public List<orderItem> OrderItem { get; set; }
    }
    [MessageContract(IsWrapped=false)]
    public class orderItem
    {
        [MessageBodyMember]
        public string Code { get; set; }
        [MessageBodyMember]
        public string Qty { get; set; }
    }

Below is where I build the list of orderItems and add it to my shipments.

public class CallbackService : ICallbackService
    {
        public Task<ExportShipmentsResponse> ExportShipments(ExportShipments request)
        {
            orderItem orderitem1 = new orderItem()
            {
                Code = "100001",
                Qty = "1"
            };

            orderItem orderitem2 = new orderItem()
            {
                Code = "100002",
                Qty = "1"
            };

            List<orderItem> orderItems = new List<orderItem>();

            orderItems.Add(orderitem1);
            orderItems.Add(orderitem2);

            shipment shipment = new shipment()
            {
                ShipID = "123456",
                ShipNo = "PSS111198",
                ShipDate = "5 Dec 2011 14:44",
                CustCode = "1111/1",
                ShipSumm = "SU",
                PONumbers = "por:0121",
                ShipComments = "",
                SuperUsers = "",
                OrderItem = orderItems
            };

            List<shipment> shipments = new List<shipment>();

            shipments.Add(shipment);

            dataExtract dataExtract = new dataExtract()
            {
                DataExtract = shipments
            };

            List<dataExtract> dataExtracts = new List<dataExtract>();

            dataExtracts.Add(dataExtract);

            return Task.FromResult(new ExportShipmentsResponse
            {
                ExportShipmentsResult = dataExtracts
            });
        }
    }

Any ideas on what I may be missing would be greatly appreciated.

Upvotes: 0

Views: 72

Answers (1)

Jiayao
Jiayao

Reputation: 578

It is not clear whether it is a client-side or a server-side.But you can check out the IClientMessageInspector for client-side and the IDispatchMessageInspector for server-side.The interface contains add and remove methods for reference.

The link below may solve the problem.

https://learn.microsoft.com/en-us/dotnet/api/system.servicemodel.dispatcher.iclientmessageinspector?view=netframework-4.8.

Thanks.

Upvotes: 0

Related Questions