Как обрабатывать десериализацию WCF Json в List, а затем приводить этот объект к разным типам? ⇐ C#
Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как обрабатывать десериализацию WCF Json в List, а затем приводить этот объект к разным типам?

Сообщение Anonymous »

У меня есть API WCF, который выглядит примерно так (анонимно):

Код: Выделить всё

[OperationContract(Name="FooBar")]
[WebInvoke(Method = "POST", UriTemplate = "FooBar")]
Task FooBar(
string scenario,
string version,
List filters);
SomeObjectClass определяется как:

Код: Выделить всё

  [DataContract]
[KnownType(typeof(List))]
[KnownType(typeof(List))]
public class SomeObjectClass
{
/// 
/// Gets or sets the property name
/// 
[DataMember(IsRequired = true)]
public string Name { get; set; }

/// 
/// Gets or sets the property value
/// 
[DataMember(IsRequired = true)]
public List Values { get; set; }
}
Класс фильтра определяется как

Код: Выделить всё

 [DataContract]
public class FilterClass
{
private string sourceString;

[DataMember(Name = "Source", IsRequired = true)]
public string SourceString
{
get
{
if (string.IsNullOrWhiteSpace(sourceString))
{
sourceString = Enum.GetName(typeof(Source), this.HealthSource);
}

return healthSignalSourceString;
}

private set { }
}

[IgnoreDataMember]
public Source SourceEnum;

[DataMember(Name = "Names", IsRequired = false)]
public List Names;

[DataMember(Name = "SomeBool", IsRequired = true)]
[JsonPropertyName("SomeBool")]
public bool SomeBool;

REST API вызывается как:

Код: Выделить всё

https://{endpoint}/FooBar

{
"scenario": "SomeScenario",
"version": "1",
"filters": [
{
"Name": "Prop1",
"Values": [
"Guid"
]
},
{
"Name": "Prop2",
"Values": [
{
"Source ": "ABC",
"SomeBool": true
}
]
}
]
}

Теперь объект Values ​​может быть списком или списком в зависимости от версии, переданной вызывающим объектом.
Я могу преобразовать объект в список строк в версии 0 без каких-либо проблем, и эта версия API работает.
Однако для «FilterClass» я не могу привести объект к FilterClass ни при каких обстоятельствах. Объект не распознается как тип класса фильтра. Был бы очень признателен за помощь в этом! Я попробовал несколько разных вещей, таких как:
  • попытка преобразовать объект в строку, а затем десериализовать как тип FilterClass (невозможно десериализовать строку, поскольку это просто System.Object). )
  • var hssf = значение как FilterClass; (выбросить null)
  • Различные оформления [DataMember]
Мне не разрешено создавать новую подпись API или новый SomeObjectClass со строго типизированным объектом, поскольку этот API поддерживает множество различных вариантов использования как часть одного и того же потока, а код под ним не очень хорошо абстрагирован.

Подробнее здесь: https://stackoverflow.com/questions/793 ... hat-object
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение