[DataContract]
public struct DocumentData
{
[DataMember]
public string key; // Field id
[DataMember]
public object value; // Value for the Field
};
[DataContract]
public struct DocumentDataInt
{
[DataMember(EmitDefaultValue=false)]
public DocumentData[] document_data;
[DataMember(EmitDefaultValue=false)]
public string error_message;
}
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json)]
public DocumentData GetDocumentData(Guid document_id)
и всё хорошо работает пока value в DocumentData — простые типы — строка или число.
Но если я хочу поместить в value что-то вроде массива других структур
[DataContract]
public struct SingleDamage
{
[DataMember(Name = "TYPE")]
public string Type;
[DataMember(Name = "PART")]
public string Part;
}
...
x.value = new SingleDamage[10];
...
то веб-сервис падает с непонятной ошибкой.
Есть способ вернуть такой массив, не нарушая обшего подхода?
Здравствуйте, KARALIUS, Вы писали: KAR>Есть способ вернуть такой массив, не нарушая обшего подхода?
Надо поиграть с knowntype.
[DataContract]
[KnownType(typeof(SingleDamage[]))]
public struct DocumentData
{
[DataMember]
public string key; // Field id
[DataMember]
public object value; // Value for the Field
};
Возможно, потребуется перейти от SingleDamage[] к List<SingleDamage>.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, KARALIUS, Вы писали: KAR>>Есть способ вернуть такой массив, не нарушая обшего подхода? S>Надо поиграть с knowntype.
Согласен, был затык с наследниками. Этот аттрибут спас.
Но, object, тогда бы уж лучше string тоже в формате json, все равно кастить.
Здравствуйте, KARALIUS, Вы писали:
KAR>Есть способ вернуть такой массив, не нарушая обшего подхода?
Другой сериализатор нарушит общий подход? https://www.newtonsoft.com/json , например.
KAR>__type — это не моё, можно ли от него избавиться?
1. А как вы планируете определять тип при парсинге?
2. Попробуйте BodyStyle = WebMessageBodyStyle.Bare: