如何在没有.xsd架构的情况下将数据序列化为XML?

时间:2017-09-26 15:23:23

标签: asp.net xml asp.net-mvc serialization xsd

我正在编写一个ASP.NET MVC(5)应用程序,我需要在其中进行一些自定义XML序列化。在我继续之前,我应该提一下,我不确定这个问题是属于这里还是属于另一个论坛。如果这个问题更适合其他地方,请告诉我。我很乐意搬家。

软件概述:

我有一个视图,其中包含一个供用户填写的表单。当用户填写必填字段并单击submit按钮时,表单中的信息应序列化为XML(基于某些XML要求),并发布到URL。对我来说这很简单,我敢肯定。我在ASP.NET MVC中做这种事情的经验很少。

我没有包含XML架构的.xsd文档。我有一个包含XML细节(Word文档)的文档,但实际的.xsd文档不可用。我不确定如何序列化数据,以便XML以预期的方式进行。

我有以下型号:

public class BookingRequest
    {
        public string billTo { get; set; }
        public string bookingStatus { get; set; }
        public string partNote { get; set; }
        public int height { get; set; }
    }

请注意,这是一个缩写版本;这个课程中有更多的字段。无论如何,当序列化为XML时,我需要height字段看起来像这样:

<HeightOf>15</HeightOf>

我还需要XML中的所有元素都遵循这个模式(我提到的表单中的所有字段都在<BookingRequest>标记下):

<Data>
    <Header>
        <UserId/>
        <Password/>
    </Header>
    <BookingRequest>
            ..
            ..
    </BookingRequest>
</Data>

我可以在没有架构的情况下这样做吗?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您不需要xsd,只要您知道将如何成为所需的结构。 首先,您需要使用[Serializable]属性来装饰您的类。然后,您可以使用System.Xml.Serialization命名空间中的属性来控制结果。例如,在高度属性的情况下,可以这样实现:

[Serializable]
public class BookingRequest
{
    public string billTo { get; set; }
    public string bookingStatus { get; set; }
    public string partNote { get; set; }
    [XmlElement(ElementName = "HeightOf")]
    public int height { get; set; }
}

有关详细信息,请参阅此处:

https://docs.microsoft.com/en-us/dotnet/standard/serialization/controlling-xml-serialization-using-attributes