2013-02-08 4 views
0

Мне удалось создать десериализацию, создав класс контрактных данных (после того, как он наложил на клиента метрическую тонну). Моя проблема в том, что оба поля, которые я объявил, возвращают пустой материал. Итак, я посмотрел на него и понял, что объект JSON вложен, и я не понимаю, как получить доступ к частям, которые находятся внутри.Как десериализовать вложенный объект?

контракт Данные, как это, но я получаю Боппа в нуль (или пустая строка, не уверен, какой) и Mopp как кучу нулей.

[DataContract] 
public class Customer 
{ 
    [DataMember(Name = "Beep")] 
    public String Bopp; 

    [DataMember(Name = "Meep")] 
    public Guid Mopp; 
} 

Я думал, что данные были в этой форме.

Однако, по-видимому, они переместили объект внутри Иным, так что это больше похоже на это.

[ "root":[ 
    { 
    "A":"some", 
    "B":[ 
     {"Beep":"beep1", "Meep":"meep1"}, 
     {"Beep":"beep2", "Meep":"meep2"}, 
     {"Beep":"beep3", "Meep":"meep3"}], 
    "C":"some" 
    }, 
    { 
    "A":"some", 
    "B":[ 
     {"Beep":"beep1", "Meep":"meep1"}, 
     {"Beep":"beep2", "Meep":"meep2"}, 
     {"Beep":"beep3", "Meep":"meep3"}], 
    "C":"some" 
    } 
]] 

Как я могу переконфигурировать контракт с данными, чтобы получить доступ к правильным полям? Или мне что-то не хватает, и имя элемента данных не должно отличаться от поля (т. Е. Beep и Bopp не будет работать) ?!

EDIT:

В соответствии с просьбой, я отправляю (почти) живут данные из строки.

{"CustomerStatuses":[{ 
    "Information":[{"Guid":"1","Role":"Customer"}], 
    "CustomerId":"12345678-1234-1324-1234-123456781234", 
    "Status":4}, 
    "Information":[{"Guid":"5","Role":"Customer"}], 
    "CustomerId":"12345678-1234-1324-1234-123456781234", 
    "Status":6}, 
    "Information":[{"Guid":"7","Role":"Seller"}], 
    "CustomerId":"12345678-1234-1324-1234-123456781234", 
    "Status":6}, 
    ... 

И вот фактический договор с данными.

[DataContract] 
public class Customer 
{ 
    [DataMember(Name = "Status")] 
    public String Status; 

    [DataMember(Name = "CustomerId")] 
    public Guid Guid; 
} 

ответ

0

Ваша структура класса должна соответствовать JSon:

<DataContract> 
Public Class Customer 

<DataMember(Name:="Status")> 
Public Property Status As Int32 

<DataMember> 
Public Property Information As Object 

<DataMember> 
Public Property CustomerId As String 

End Class 




Public Class Customers 

Public Property CustomerStatuses As List(Of Customer) 

End Class 
+0

К сожалению - я имел в виду, чтобы сделать его короче и более общий характер. Возможно, ошибка. Вы говорите, что мои свойства в классе ** должны совпадать с именами из строки JSON ?! Не могу я их каким-то образом сопоставить (я думал, что «DataMember» был для этой цели). Кроме того, вы говорите, что у меня ** есть **, чтобы настроить структуру нескольких классов для чтения строки JSON? Я надеялся как-то подключиться к структуре и прочитать ее часть. – 2013-02-08 17:54:19

+0

Я подготовил и разместил обновление, показывающее фактическую структуру строки JSON. Надеюсь, эта помощь поможет мне. :) – 2013-02-08 18:03:39

+1

Вы можете попробовать библиотеку Json.NET вместо сериализаторов контрактов. Это должно позволить вам десериализовать без структуры класса. –

Смежные вопросы