كيفية تحديد معلمة نوع عام في عقد بيانات شسد?
-
12-12-2019 - |
سؤال
لدي زوج عقد بيانات الطلب والاستجابة التالي لاستدعاء طريقة خدمة الويب
<xs:element name="GetUserOptionsRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="OptionType" type="entities:UserOption" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetUserOptionsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Options" type="entities:UserOption" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
المشكلة هي أن ما أريد أن يكون هو وسيلة للقول (بسيودوكود)
GetUserResponse response = GetuserOptions(new GetUserOptionsRequest(Type T))
وللحصول على استجابة تحتوي على إليست اعتمادا على نوع أنا تمر من خلال.
مع عقد البيانات أعلاه شسد ، فإنه يتوقع مثيل فئة في كائن الطلب ، عندما أريد فقط لتحديد تعريف نوع.
حقا أفترض ما أريد ذلك
GetUserResponse<T> response = GetUserOptions(new GetUserOptionsRequest<T>());
ولكن أنا لست متأكدا من كيفية تحديد فئات/طرق عامة في شسد.يمكن لأي شخص أن يشير لي في مقال جيد أو شرح كيف يمكنني تحديد هذا في شسد?
أنا باستخدام وسف الأزرق لتوليد رمز أيضا.
المحلول
لسوء الحظ ، انها غير ممكن لتحديد أنواع مع الأدوية المفتوحة في شسد.
في الواقع ، شسد ليس لديها طريقة أصلية لتمثيل الحجج نوع عام على الإطلاق.ومع ذلك ، إذا كنت ستولد صافي أنواع من مخطط شسد ، يمكنك تقليد مغلق الحجج العامة عن طريق تزيين نوع مع <xsd:annotation>
تحتوي على <xsd:appinfo>
العنصر:
<xs:element name="Foo">
<xs:complexType>
<xs:sequence>
...
</xs:sequence>
<xs:annotation>
<xs:appinfo>
<GenericType Name="FooOf{0}{#}"
Namespace="...">
<GenericParameter Name="string"
Namespace="http://www.w3.org/2001/XMLSchema" />
</GenericType>
</xs:appinfo>
</xs:annotation>
</xs:complexType>
</xs:element>
سيتم تمثيل هذا المخطط شسد في نظام نوع صافي كفئة من نوع Foo<string>
.لاحظ أنه في هذا المثال يتم تحديد الوسيطة العامة على النحو التالي string
, ، ولكن لا شيء يمنعك من إعادة استخدام نفس تعريف عنصر شسد في عقود متعددة مع الحجج العامة المختلفة.
أيضا ، لاحظ أن GenericType
العنصر هو لا جزء من معيار شسد وسيتم تفسيرها فقط من قبل أداة توليد رمز صافي.