从c#类生成Xml架构

时间:2014-07-02 06:23:07

标签: c# xml xsd xsd.exe

我需要创建一个Web服务,该服务将在我的组织内集成SAP的信息。我有一个具有数据库结构的现有应用程序。 SAP将使用Web服务将值存储到数据库中的相关表/列中。

为此,我需要为SAP团队提供将用于传递数据的Xml架构。现在,我对xml知之甚少。我所做的是基于所有相关表的Entity Framework类创建了Dto。这包括8个不同的类: RFQ Schema

RFQ是base class,它可以包含RFQGoods或RFQServices。

接下来,我尝试使用xsd.exe工具生成架构,但收到了以下结果:

  

错误:处理'RfqService.dll'时出错      - 反映出类型为“RfqService.DataTransferObjects.RfqDto”的错误。
     - 无法序列化成员'RfqService.DataTransferObjects.RfqDto.RFQGoods'的
  输入'System.Collections.Generic.ICollection 1[[RfqService.DataTransferObjects.RfqGoodDto, RfqService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]', see inner exception for more details. - Cannot serialize member RfqService.DataTransferObjects.RfqDto.RFQGoods of type System.Collections.Generic.ICollection 1 [[RfqService.DataTransferObjects.RfqGoodDto,RfqService,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]因为它是一个接口。

我认为我需要的是类及其attributes的正确xml parameters,但我不知道需要添加哪些属性才能使其工作且尚未能够找到答案。下面是RfqDto类:

[DataContract]
public class RfqDto
{
    [DataMember]
    public int RfqId { get; set; }

    [DataMember]
    public bool IsAbove30k { get; set; }

    [DataMember]
    public string ReferenceNumber { get; set; }

    [DataMember]
    public string ContactPersonName { get; set; }

    [DataMember]
    public string ContactPersonTelephoneNumber { get; set; }

    [DataMember]
    public string ContactPersonCellPhone { get; set; }

    [DataMember]
    public string BuyerName { get; set; }

    [DataMember]
    public string BuyerTelephoneNumber { get; set; }

    [DataMember]
    public string BuyerEmailAddress { get; set; }

    [DataMember]
    public Nullable<int> QuotationBoxNumber { get; set; }

    [DataMember]
    public Nullable<int> FloorNumber { get; set; }

    [DataMember]
    public virtual ProcurementItemDto ProcurementItem { get; set; }

    [DataMember]
    public virtual ICollection<RfqGoodDto> RfqGoods { get; set; }

    [DataMember]
    public virtual ICollection<RfqServiceDto> RfqServices { get; set; }
}

2 个答案:

答案 0 :(得分:1)

尝试将ICollection<T>成员更改为List<T>。你得到的错误基本上告诉你,你不能序列化接口。

答案 1 :(得分:0)

您可以使用EntityFrameWork执行此操作。您必须将一个.edmx文件添加到您的应用程序中,然后您必须配置数据库,在模型中您将找到数据库的模式

更多信息,您可以参考链接EF