C # Entity Framework Json десериализует проблемы с массивом строк - PullRequest
0 голосов
/ 22 января 2019

У меня есть файл Json, который можно использовать для десериализации в среду Entity.Для упрощения мы можем предположить, что Json выглядит так:

{
  "stat": "val0",
  "results": [
    {
      "datasets": [
        "val1",
        "val2"
      ],
      "head": "val3"
    },
    {
      "datasets": [
        "val4",
        "val5"
      ],
      "head": "val6"
    }
  ]
} 

А мои классы сущностей вроде

[Serializable]
public class Root
{
    [Key]
    public int Id { get; set; }
    public int stat { get; set; }
    public List<Result> results { get; set; }
}

[Serializable]
public class Result
{
    [Key]
    public int Id { get; set; }
    public List<String> _strings { get; set; }
    public List<string> Strings
    {
        get { return _strings; }
        set { _strings = value; }
    }

    [Required]
    public string datasets
    {
        get { return String.Join(",", _strings); }
        set { _strings = value.Split(',').ToList(); }
    }
    public string head{ get; set; }
    public virtual root { get; set; }

}

Я знаю, что Entity Framework не поддерживает примитивные типы, и я знаю причины проблем из полей моих наборов данных,что я нашел этот способ решить проблему десериализации массива строк здесь .Я пытался

 URL = "http://...";//Restful webservice address
 WebClient client = new WebClient();
 String JSON= client.DownloadString(URL);
 var dsobj = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<RootObject>(json);

Но я получил

System.InvalidOperationException

Тогда я решил использовать Newtonsoft

URL = "http://...";//Restful webservice address
WebClient client = new WebClient();
String JSON= client.DownloadString(URL);
var dsobj = JsonConvert.DeserializeObject<Root>(json);

Затем я получил эту ошибку

Newtonsoft.Json.JsonReaderException: 'При анализе значения обнаружен неожиданный символ: [.Path 'results [0] .senses [0] .definition', строка 1, позиция ...

Я нашел это , но я не могу понять это.

Как можно исправить эти исей.Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 25 января 2019

1001 * попробовать *

[Serializable]
public class Root
{
    [Key]
    public int Id { get; set; }
    public string stat { get; set; } // changed to a string
    public List<Result> results { get; set; }
}

[Serializable]
public class Result
{
    [Key]
    public int Id { get; set; }
    public List<String> _dataSets { get; set; }
    public List<string> dataSets // the JSON array will deserialize into this property
    {
        get { return _dataSets; }
        set { _dataSets = value; }
    }

    [Required]
    public string DatasetsAsString
    {
        get { return String.Join(",", _dataSets); }
        set { _dataSets = value.Split(',').ToList(); }
    }
    public string head{ get; set; }
    public virtual root { get; set; }

}

Редактировать: свойство stat тоже должно быть строкой.

0 голосов
/ 22 января 2019

Ваш json состоит из двух нежелательных запятых, попробуйте удалить эти

enter image description here

...