Как обрабатывать десериализацию 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 может быть List или List в зависимости от версии, переданной вызывающим объектом. .
Я могу без проблем преобразовать объект в список строк версии 0, и эта версия API работает.
Однако для FilterClass Я не могу преобразовать объект в FilterClass ни при каких обстоятельствах. Объект не распознается как тип класса фильтра. Был бы очень признателен за помощь в этом! Я попробовал несколько разных вещей, таких как:
  • попытка преобразовать объект в строку, а затем десериализовать как тип FilterClass (невозможно десериализовать строку в том виде, в котором она есть) просто System.Object)
  • Код: Выделить всё

    var hssf = value as FilterClass;
    (выбросить null)
  • Различные украшения [DataMember]
Я не разрешено создавать новую подпись API или новый SomeObjectClass со строго типизированным объектом, поскольку этот API поддерживает множество различных вариантов использования как часть одного и того же потока, а код под ним недостаточно абстрагирован.

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

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

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

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

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

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