estoy teniendo un pequeño problema con los proxies de servicio WCF en el que el mensaje contiene List<string>
como parámetro.¿Puedo detener mi generación WCF ArrayOfString en lugar de cadena [] o la lista <string>
Estoy utilizando el 'Agregar servicio de referencia' en Visual Studio para generar una referencia a mi servicio.
// portion of my web service message
public List<SubscribeInfo> Subscribe { get; set; }
public List<string> Unsubscribe { get; set; }
Estas son las propiedades generadas en mi MsgIn
para uno de mis métodos web. Se puede ver que solía ArrayOfString
cuando estoy usando List<string>
, y el otro lleva List<SubscribeInfo>
- que coincide con mi C# objeto original anterior.
[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");
}
}
}
La clase ArrayOfString generada se ve así. Esta es una clase generada en mi código, no es una clase .NET. En realidad, me generó una clase que hereda de List, pero no tuve la 'decencia' de crearme ningún constructor.
[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> {
}
El problema es que a menudo crear mi mensaje como este:
client.UpdateMailingList(new UpdateMailingListMsgIn()
{
Email = model.Email,
Name = model.Name,
Source = Request.Url.ToString(),
Subscribe = subscribeTo.ToList(),
Unsubscribe = unsubscribeFrom.ToList()
});
me gusta mucho el aspecto limpio esto me da.
Ahora para el problema real:
I Cant asignar un List<string>
a la propiedad Unsubscribe
que es un ArrayOfString
- a pesar de que hereda de la lista. De hecho, parece que no puedo encontrar CUALQUIER forma de asignarlo sin declaraciones adicionales.
He intentado lo siguiente:
new ArrayOfString(unsubscribeFrom.ToList())
- este constructor no existe :-(- cambiar el tipo de la matriz utilizada por el generador de código - no funciona - siempre me da ArrayOfString
- intenta convertir a
List<string>
ArrayOfString
(!?) - falla con 'incapaz de lanzar', a pesar de que compila bien - crear
new ArrayOfString()
y luegoAddRange(unsubscribeFrom.ToList())
- obras, pero no puedo hacer yo t todo en una sola declaración - crea una función de conversión
ToArrayOfString(List<string>)
, que funciona pero no está tan limpia como yo quiero.
Esto solo hace esto para el hilo, que es molesto.
¿Echo de falta algo? ¿Hay alguna forma de decirle que no genere ArrayOfString
, o algún otro truco para asignarlo?
¡Estoy cansado también! sigo escribiendo preguntas demasiado largas. lo siento si no estaba claro. ¡Creo que lo has entendido! desafortunadamente su sugerencia no funciona - ¡INSISTE en hacer una nueva clase de ArrayOfString para la cadena, lo que sea que elija 4! tal vez se confunde la cadena de pensamiento es un tipo de valor? –
hmm. Tendría que probarlo. desafortunadamente mi horario de trabajo es un poco agitado hoy –
Encontré que esto no funciona. – Abacus