C# Webservice不会序列化请求的所有属性

C# Webservice不会序列化请求的所有属性,c#,web-services,soap,C#,Web Services,Soap,大家好 我注意到我的SOAP Web服务有一个奇怪的行为 当通过soapui发送请求时,我填充了对象的每个属性 在调试webservice时,只有几个属性被填充。 在15处房产中,排名前5位的房产似乎都被填满了。在切换Soap请求中的属性时,前5名也会被填充 有人知道为什么请求对象的序列化不起作用吗 接口定义为OperationContract,属性和请求类定义为DataMember/DataContract 这是请求类 [DataContract] public class Article {

大家好

我注意到我的SOAP Web服务有一个奇怪的行为

当通过soapui发送请求时,我填充了对象的每个属性

在调试webservice时,只有几个属性被填充。 在15处房产中,排名前5位的房产似乎都被填满了。在切换Soap请求中的属性时,前5名也会被填充

有人知道为什么请求对象的序列化不起作用吗

接口定义为OperationContract,属性和请求类定义为DataMember/DataContract

这是请求类

[DataContract]
public class Article
{
    [DataMember]
    public String ArticleName
    {
        get { return _ArticleName; }
        set { _ArticleName = value; }
    }

    [DataMember]
    public String Description
    {
        get { return _Description; }
        set { _Description = value; }
    }

    [DataMember]
    public Int ProductSubGroupNumber
    {
        get { return _ProductSubGroupNumber; }
        set { _ProductSubGroupNumber = value; }
    }

    [DataMember]
    public Double ArticleNumber
    {
        get { return _ArticleNumber; }
        set { _ArticleNumber = value; }
    }

    [DataMember]
    public Int Color
    {
        get { return _Color; }
        set { _Color = value; }
    }

    [DataMember]
    public Double Quantity
    {
        get { return _Quantity; }
        set { _Quantity = value; }
    }

    [DataMember]
    public Int Version
    {
        get { return _Version; }
        set { _Version = value; }
    }

    [DataMember]
    public Int Material
    {
        get { return _Material; }
        set { _Material = value; }
    }

    [DataMember]
    public Int Warehouse
    {
        get { return _Warehouse; }
        set { _Warehouse = value; }
    }
}
还有Soap请求

      <CreateArticle>
     <ArticleGroup>1232456789</ArticleGroup>
     <Articles>
        <Article>
           <ArticleName>test</ArticleName>
           <Description>TEST 1213123</Description>
           <ProductSubGroupNumber>987654</ProductSubGroupNumber>
           <ArticleNumber>12345</ArticleNumber>
           <Color>0</Color>
           <Quantity>1</Quantity>
           <Material>0</Material>
           <Warehouse>0</Warehouse>
           <Version>0</Version>
        </Article>
     </Articles>
  </CreateArticle>

1232456789
测试
测试1213123
987654
12345
0
1.
0
0
0
在调试器中,只有颜色填充之前的属性-其余为空。 如果我在请求中交换它们,则其他已填充,其他未填充


请求包含一个ArticleGroupID作为Int和一个项目数组。

看起来这是
DataContractSerializer
繁琐的“顺序”强制。它真的很想知道数据的顺序。你可以尝试教育它:

[DataMember(Order=0)]
public string ArticleName {get;set;}

[DataMember(Order=1)]
public string Description {get;set;}

[DataMember(Order=2)]
public int ProductSubGroupNumber {get;set;}

[DataMember(Order=3)]
public double ArticleNumber {get;set;}

[DataMember(Order=4)]
public int Color {get;set;}

[DataMember(Order=5)]
public double Quantity {get;set;}

[DataMember(Order=8)]
public int Version {get;set;}

[DataMember(Order=6)]
public int Material {get;set;}

[DataMember(Order=7)]
public int Warehouse {get;set;}

如果没有代码,很难说什么,但是:它们是否设置为相应的默认值?这只是一个简单的请求类,每个属性都有get和set函数。未设置Defauld值,所有属性仅为简单类型(int、double和string),显示相关C#代码并在SoapUI中显示请求。如果没有提供的代码,我们将无能为力,sorry@CodeCaster添加了代码示例;)在向DataMembers添加和排序以及分别更改soapxml请求中的顺序之后,所有这些都可以正常工作。非常感谢我通常编写这样的属性
[DataMember(nameof(MyProperty),Order=0,IsRequired=true)]
-因此我有安全的订单和必需的元素:)@DavidHruška虽然没有指定,但名称隐式地是成员名称;在这里添加(…)的
名称
会带来复制/粘贴错误的风险,而实际上不做任何其他事情是的,我同意。我已经习惯了这个表达式,但是为了防止复制/粘贴错误,最好省略Name属性。同意;)