C # Parse Json - System.Runtime.Serialization.Json - PullRequest
0 голосов
/ 20 августа 2011

Я использую библиотеку System.Runtime.Serialization.Json

Это не работает

public class Detections
            {
                [DataContract]
                public class RootObject
                {
                    [DataMember(Name = "data")]
                    public DataObject Data { get; set; }
                }

                [DataContract]
                public class DataObject
                {
                    [DataMember(Name = "detections")]
                    public List<Detection> Detections { get; set; }
                }

                [DataContract]
                public class Detection
                {
                    [DataMember(Name = "language")]
                    public string Language { get; set; }
                    [DataMember(Name = "isReliable")]
                    public string IsReliable { get; set; }
                    [DataMember(Name = "confidence")]
                    public string Confidence { get; set; }
                }
            }

Так как мне разобрать это

{
     "data": {
      "detections": [
       [
        {
         "language": "tr",
         "isReliable": false,
         "confidence": 0.086520955
        }
       ]
      ]
     }
    }

Ответы [ 3 ]

5 голосов
/ 21 августа 2011

Проблема возникает по двум причинам.

1) Ваши вложенные классы необходимо удалить изнутри класса Detections.

2) JSON содержит многомерный массив для элемента обнаружения, где, как я полагаю, он должен быть единичным.

Я проверил приведенный ниже код, он отлично работает.

//Classes

[DataContract]
public class RootObject
{
    [DataMember(Name = "data")]
    public DataObject Data { get; set; }
}

[DataContract]
public class DataObject
{
    [DataMember(Name = "detections")]
    public List<Detection> Detections { get; set; }
}

[DataContract]
public class Detection
{
    [DataMember(Name = "language")]
    public string Language { get; set; }
    [DataMember(Name = "isReliable")]
    public string IsReliable { get; set; }
    [DataMember(Name = "confidence")]
    public string Confidence { get; set; }
}

//Code to deserialize

var serializer = new DataContractJsonSerializer(typeof(RootObject));
var json = "{\"data\": {\"detections\": [{\"language\": \"tr\",\"isReliable\": false,\"confidence\": 0.086520955}]}}";
var stream = new MemoryStream(Encoding.UTF8.GetBytes(json));
var rootObject = serializer.ReadObject(stream);
stream.Close();

Надеюсь, это поможет вам.

0 голосов
/ 30 марта 2012

В вашем json «Обнаружение» есть список списков. Обратите внимание, что ответ от jdavies не распознает это.

[DataContract]
public class DataObject
{
[DataMember(Name = "detections")]
public List<List<Detection>> Detections { get; set; }
}
0 голосов
/ 16 января 2012

Все правильно, за исключением того, что Detections - это коллекция коллекций.Я не знаю, почему это так, но у меня это работает.

[DataContract]
public class DataObject
{
    [DataMember(Name = "detections")]
    public List<List<Detection>> Detections { get; set; }
}
...