У меня есть небольшая проблема с прокси-серверами WCF, где сообщение содержит List<string>
в качестве параметра.
Я использую ссылку "Добавить службу" в Visual Studio для создания ссылки на мою службу.
// portion of my web service message
public List<SubscribeInfo> Subscribe { get; set; }
public List<string> Unsubscribe { get; set; }
Это сгенерированные свойства на моем MsgIn
для одного из моих веб-методов.
Вы можете видеть, что он использовал ArrayOfString
, когда я использую List<string>
, а другой принимает List<SubscribeInfo>
-, который соответствует моему исходному объекту С# выше.
[System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)]
public System.Collections.Generic.List<DataAccess.MailingListWSReference.SubscribeInfo> Subscribe {
get {
return this.SubscribeField;
}
set {
if ((object.ReferenceEquals(this.SubscribeField, value) != true)) {
this.SubscribeField = value;
this.RaisePropertyChanged("Subscribe");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false)]
publicDataAccess.MailingListWSReference.ArrayOfString Unsubscribe {
get {
return this.UnsubscribeField;
}
set {
if ((object.ReferenceEquals(this.UnsubscribeField, value) != true)) {
this.UnsubscribeField = value;
this.RaisePropertyChanged("Unsubscribe");
}
}
}
Созданный класс ArrayOfString выглядит следующим образом. Это класс, сгенерированный в моем коде - это не класс .NET. Это фактически породило меня класс, который наследует List, но не имеет "порядочности", чтобы создать мне любые конструкторы.
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.CollectionDataContractAttribute(Name="ArrayOfString", Namespace="http://www.example.com/", ItemName="string")]
[System.SerializableAttribute()]
public class ArrayOfString : System.Collections.Generic.List<string> {
}
Проблема в том, что я часто создаю свое сообщение следующим образом:
client.UpdateMailingList(new UpdateMailingListMsgIn()
{
Email = model.Email,
Name = model.Name,
Source = Request.Url.ToString(),
Subscribe = subscribeTo.ToList(),
Unsubscribe = unsubscribeFrom.ToList()
});
Мне очень нравится чистый взгляд, который это дает мне.
Теперь для актуальной проблемы:
Я не могу присвоить List<string>
свойству Unsubscribe
, который является ArrayOfString
, даже если он наследует List. На самом деле я не могу найти ЛЮБОЙ способ присвоить его без дополнительных утверждений.
Я пробовал следующее:
-
new ArrayOfString(unsubscribeFrom.ToList())
- этот конструктор не существует: - ( - изменение типа массива, используемого генератором кода, не работает - он всегда дает мне ArrayOfString (!?)
- попробуйте применить
List<string>
кArrayOfString
- не удается выполнить "неактивный", даже если он компилирует только тонкие - create
new ArrayOfString()
, а затемAddRange(unsubscribeFrom.ToList())
- работает, но я не могу сделать все это в одном выражении - создайте функцию преобразования
ToArrayOfString(List<string>)
, которая работает, но не так чиста, как я хочу.
Он делает это только для строки, что раздражает.
Мне что-то не хватает? Есть ли способ сказать ему не генерировать ArrayOfString
- или какой-нибудь другой трюк, чтобы назначить его?