#c# #xml-serialization #xml-namespaces
#c# #xml-сериализация #xml-пространства имен
Вопрос:
Я хотел бы знать, возможно ли опустить префикс пространства имен в теге XML из сериализованного объекта, используя System.Xml.Serialization . Класс исходного объекта помечен, чтобы получить правильный XML-документ.
Вот XML, который я получаю:
<?xml version="1.0" encoding="utf-8"?>
<ns:ContainerAddRequest xmlns:ns="enterprise.com/common/messages" xmlns:commonTypes="enterprise.com/common/types"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
RequestID="0324e614-085a-49c1-aeb9-81604314fbbe"
Timestamp="2019-04-15T15:29:14.738555 02:00" >
<commonTypes:ContainerInformation xsi:type="commonTypes:SingleContainerInfo">
<Container>
<GUID GUID="a591e007-07cc-4aba-a318-c3b0c2d53193" />
<Lenght>6068</Lenght>
<Height>2348</Height>
</Container>
<commonTypes:Position xsi:type="commonTypes:SlotPosition">
<commonTypes:Stack xsi:type="commonTypes:FixedStack">
<AreaID>A10</AreaID>
</commonTypes:Stack>
<Tier>A</Tier>
<DoorOrientation>South</DoorOrientation>
</commonTypes:Position>
</commonTypes:ContainerInformation>
</ns:ContainerAddRequest>
И это XML, который я хотел бы получить:
<?xml version="1.0" encoding="utf-8"?>
<ns:ContainerAddRequest xmlns:ns="enterprise.com/common/messages"
xmlns:commonTypes="enterprise.com/common/types"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
RequestID="0324e614-085a-49c1-aeb9-81604314fbbe"
Timestamp="2019-04-15T15:29:14.738555 02:00" >
<ContainerInformation xsi:type="commonTypes:SingleContainerInfo">
<Container>
<GUID GUID="a591e007-07cc-4aba-a318-c3b0c2d53193" />
<Lenght>6068</Lenght>
<Height>2348</Height>
</Container>
<Position xsi:type="commonTypes:SlotPosition">
<Stack xsi:type="commonTypes:FixedStack">
<AreaID>A10</AreaID>
</Stack>
<Tier>A</Tier>
<DoorOrientation>South</DoorOrientation>
</Position>
</ContainerInformation>
</ns:ContainerAddRequest>
Как вы можете видеть, узлы ContainerInformation, Position и Stack не имеют префикса «CommonTypes:»
Заранее благодарю.
Что касается определения классов, здесь ContainerAddRequest
[XmlRoot(ElementName = "ContainerAddRequest", Namespace = "enterprise.com/common/messages")]
public class ContainerAddRequest : Request
{
[XmlIgnore]
public MessageHeader Header { get; set; }
[XmlElement(ElementName = "ContainerInformation", Namespace = "enterprise.com/common/types")]
public ContainerInfoBase ContainerInformation { get; set; }
[XmlElement(ElementName = "CHEID", Namespace = "")]
public string CHEID { get; set; }
}
а ContainerInfoBase — это абстрактный класс,
[XmlInclude (typeof(SingleContainerInfo))]
[XmlInclude (typeof(TwinCompositionInfo))]
[XmlInclude (typeof(QuadCompositionInfo))]
[XmlInclude (typeof(TandemCompositionInfo))]
public abstract class ContainerInfoBase { }
и, наконец, здесь класс SingleContainerInfo,
[XmlRoot(ElementName = "SingleContainerInfo")]
public class SingleContainerInfo : ContainerInfoBase
{
[XmlElement(ElementName = "Container", Namespace = "")]
public Container Container { get; set; }
[XmlElement(ElementName = "Position")]
public PositionBase Position { get; set; }
}
Комментарии:
1. Можете ли вы включить источник
ContainerAddRequest
иContainerInformation
в свой вопрос?2. Я только что добавил определение классов @Xiaoy312.