C# автоматическая десериализация свойства JSON

Проверьте функцию str_extract_numbers() из пакета strex.

pacman::p_load(strex)
list=list()
list[1] = "djud7+dg[a]hs667"
list[2] = "7fd*hac11(5)"
list[3] = "2tu,g7gka5"
charvec <- unlist(list)
print(charvec)
#> [1] "djud7+dg[a]hs667" "7fd*hac11(5)"     "2tu,g7gka5"
str_extract_numbers(charvec)
#> [[1]]
#> [1]   7 667
#> 
#> [[2]]
#> [1]  7 11  5
#> 
#> [[3]]
#> [1] 2 7 5
unique(unlist(str_extract_numbers(charvec)))
#> [1]   7 667  11   5   2

Создано в 2018-09-03 с помощью пакета представ (v0.2.0).

50
задан Community 23 May 2017 в 02:34
поделиться

4 ответа

Здесь десериализатор пытается угадать имя ваших полей поддержки. Вы можете решить эту проблему, добавив явные сопоставления (атрибуты DataContract / DataMember) следующим образом:

[DataContract]
public class Cat
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Breed { get; set; }
}
80
ответ дан 7 November 2019 в 10:46
поделиться

Вы можете сделать это с помощью JavaScriptSerializer , находящегося в пространстве имен System.Web.Script.Serialization :

JavaScriptSerializer serializer = new JavaScriptSerializer();
Cat c = serializer.Deserialize<Cat>(jsonString);

У меня есть объекты POCO с автоматическими свойствами, и это прекрасно работает.

EDIT: Я написал о сериализаторах JSON в .NET , которые сравнивают этот сериализатор с DataContractJsonSerializer .

20
ответ дан 7 November 2019 в 10:46
поделиться

I ' m при условии, что вы передаете данные через веб-службу. Если вы используете класс WebService с атрибутом ScriptMethod без комментариев, методы веб-службы могут читать JSON изначально. Они даже используют тот же JavaScriptSerializer, о котором говорилось выше. Если вы используете WCF, я немного не понимаю логики.

Но убедитесь, что ваш объект JSON возвращает данные для КАЖДОГО свойства в вашем классе. В вашей ошибке упоминается свойство Breed, которого нет в вашем примере.

Кроме того, на стороне JavaScript, применительно к динамической природе JavaScript, легко добавлять новые свойства к вашим объектам. Иногда это может привести к циклическим ссылкам. Вам следует удалить любые дополнительные данные, которые вы могли добавить (точно так же, как вы отправляете данные через веб-метод, а затем добавьте их снова, когда закончите).

Если вы используете класс WebService с атрибутом ScriptMethod без комментариев, методы веб-службы могут читать JSON изначально. Они даже используют тот же JavaScriptSerializer, о котором говорилось выше. Если вы используете WCF, я немного не понимаю логики.

Но убедитесь, что ваш объект JSON возвращает данные для КАЖДОГО свойства в вашем классе. В вашей ошибке упоминается свойство Breed, которого нет в вашем примере.

Кроме того, на стороне JavaScript, применительно к динамической природе JavaScript, легко добавлять новые свойства к вашим объектам. Иногда это может привести к циклическим ссылкам. Вам следует удалить любые дополнительные данные, которые вы могли добавить (точно так же, как вы отправляете данные через веб-метод, а затем добавьте их снова, когда закончите).

Если вы используете класс WebService с атрибутом ScriptMethod без комментариев, методы веб-службы могут читать JSON изначально. Они даже используют тот же JavaScriptSerializer, о котором говорилось выше. Если вы используете WCF, я немного не понимаю логики.

Но убедитесь, что ваш объект JSON возвращает данные для КАЖДОГО свойства в вашем классе. В вашей ошибке упоминается свойство Breed, которого нет в вашем примере.

Кроме того, на стороне JavaScript, применительно к динамической природе JavaScript, легко добавлять новые свойства к вашим объектам. Иногда это может привести к циклическим ссылкам. Вам следует удалить любые дополнительные данные, которые вы могли добавить (точно так же, как вы отправляете данные через веб-метод, а затем добавьте их снова, когда закончите).

методы веб-службы могут читать JSON изначально. Они даже используют тот же JavaScriptSerializer, о котором говорилось выше. Если вы используете WCF, я немного не понимаю логики.

Но убедитесь, что ваш объект JSON возвращает данные для КАЖДОГО свойства в вашем классе. В вашей ошибке упоминается свойство Breed, которого нет в вашем примере.

Кроме того, на стороне JavaScript, применительно к динамической природе JavaScript, легко добавлять новые свойства к вашим объектам. Иногда это может привести к циклическим ссылкам. Вам следует удалить любые дополнительные данные, которые вы могли добавить (точно так же, как вы отправляете данные через веб-метод, а затем добавьте их снова, когда закончите).

методы веб-службы могут читать JSON изначально. Они даже используют тот же JavaScriptSerializer, о котором говорилось выше. Если вы используете WCF, я не совсем понимаю логику.

Но убедитесь, что ваш объект JSON возвращает данные для КАЖДОГО свойства в вашем классе. В вашей ошибке упоминается свойство Breed, которого нет в вашем примере.

Кроме того, на стороне JavaScript, применительно к динамической природе JavaScript, легко добавлять новые свойства к вашим объектам. Иногда это может привести к циклическим ссылкам. Вам следует удалить любые дополнительные данные, которые вы могли добавить (точно так же, как вы отправляете данные через веб-метод, а затем добавьте их снова, когда закончите).

Но убедитесь, что ваш объект JSON возвращает данные для КАЖДОГО свойства в вашем классе. В вашей ошибке упоминается свойство Breed, которого нет в вашем примере.

Кроме того, на стороне JavaScript, применительно к динамической природе JavaScript, легко добавлять новые свойства к вашим объектам. Иногда это может привести к циклическим ссылкам. Вам следует удалить любые дополнительные данные, которые вы могли добавить (точно так же, как вы отправляете данные через веб-метод, а затем добавьте их снова, когда закончите).

Но убедитесь, что ваш объект JSON возвращает данные для КАЖДОГО свойства в вашем классе. В вашей ошибке упоминается свойство Breed, которого нет в вашем примере.

Кроме того, на стороне JavaScript, применительно к динамической природе JavaScript, легко добавлять новые свойства к вашим объектам. Иногда это может привести к циклическим ссылкам. Вам следует удалить любые дополнительные данные, которые вы могли добавить (точно так же, как вы отправляете данные через веб-метод, а затем добавьте их снова, когда закончите).

1
ответ дан 7 November 2019 в 10:46
поделиться

Ответ Бареты Решил k__backingField Bloat для меня. Просто крошечное дополнение, которое вы можете украсить этот класс для автоматического сериализации в XML или JSON аналогичным образом:

[Serializable, XmlRoot, DataContract]
public class Cat
{
  [XmlElement]
  [DataMember]
  public string Name { get; set; }
  [XmlElement]
  [DataMember]
  public string Breed { get; set; }
}

... а затем использовать DataContractjsonserializer или XMLSerializer, чтобы приготовить его для вашей конечной точки.

5
ответ дан 7 November 2019 в 10:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: