struct
WCF サービスで次のように定義しました。
[Serializable]
[DataContract]
public struct CompositeKey :
IComparable, IComparable<CompositeKey>, IEquatable<CompositeKey>
{
[DataMember]
public long Primary { get; private set; }
[DataMember]
public byte Secondary { get; private set; }
//others
}
これは、他のデータ コントラクトのメンバーとして使用されます。
[DataContract]
public class PatternFrequencyArgs
{
[DataMember(IsRequired=true, EmitDefaultValue=false)]
public CompositeKey PatternKey { get; set; }
[DataMember(IsRequired = true)]
public CompositeKey SessionStatKey { get; set; }
[DataMember]
public int Frequency { get; set; }
}
クライアント側では、次のwsutil.exe
構造体を生成します。
typedef struct PatternFrequencyArgs
{
int Frequency;
struct CompositeKey* PatternKey; //why pointer?
struct CompositeKey* SessionStatKey; //why pointer?
} PatternFrequencyArgs;
ご覧のとおり、CompositeKey
メンバーはポインターとして生成されます。それらをポインターにしたくありません。それを回避し、代わりに非ポインターメンバーとして生成するにはどうすればよいですか?
上記の構造体が生成される関連する XSD は次のとおりです (推測します)。
<xs:complexType name="PatternFrequencyArgs">
<xs:sequence>
<xs:element minOccurs="0" name="Frequency" type="xs:int" />
<xs:element xmlns:q6="http://schemas.etc..." name="PatternKey" type="q6:CompositeKey">
<xs:annotation>
<xs:appinfo>
<DefaultValue EmitDefaultValue="false" xmlns="http://schemas.etc..." />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element xmlns:q7="http://schemas.etc..." name="SessionStatKey" type="q7:CompositeKey" />
</xs:sequence>
</xs:complexType>