【发布时间】:2016-06-16 14:54:09
【问题描述】:
当我尝试按包管理器控制台上的更新数据库时 我收到此错误
未解析成员“Newtonsoft.Json.JsonSerializationException,Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”的类型。
如何解决此错误?我的代码是:
protected override void Seed(Gamer.DataLayer.GamerContext context)
{
// TODO:
// Create a class GamerData to store a list of Games
// Deserialize the JSON string to a GamerData object (call this object gdata)
var gdata = JsonConvert.DeserializeObject<GamerContext>(_json);
Console.WriteLine(gdata.Games.Where(x => x.Language == "EN"));
foreach (var game in gdata.Games)
{
foreach (var gameGenre in game.GameGenres)
{
Genre myGenre = context.Genres.Where(g => g.GenreId == gameGenre.GenreId).FirstOrDefault();
if (myGenre != null)
gameGenre.GenreId = myGenre.GenreId;
}
foreach (var platformGame in game.PlatformGames)
{
Platform myPlatform = context.Platforms.Where(p => p.PlatformId == platformGame.Platform.PlatformId).FirstOrDefault();
if (myPlatform != null)
platformGame.Platform = myPlatform;
}
context.Games.Add(game);
context.SaveChanges();
// Add the data to your database
}
}
_json Json 是一个完整的 JSON 字符串,其中包含我数据库的所有数据
JSON 字符串
private string _json = @"{""Games"":[
{
""EAN"":""2750026762618"",
""GameName"":""Uncharted 4"",
""Language"":""en|nl"",
""GameGenres"":
[
{
""GameId"": ""2750026762618"",
""Genre"":{
""GenreId"":""1"",
""GenreName"":""Actie""}
},
{
""GameId"": ""2750026762618"",
""Genre"":{
""GenreId"":""2"",
""GenreName"":""Avontuur""}
},
{
""GameId"": ""2750026762618"",
""Genre"":{
""GenreId"":""9"",
""GenreName"":""Role Playing Game""}
},
{
""GameId"": ""2750026762618"",
""Genre"":{
""GenreId"":""10"",
""GenreName"":""Shooter""}
}
],
""PlatformGames"":
[
{
""GameId"":""2750026762618"",
""Platform"":{
""PlatformId"":""2"",
""PlatformName"":""Playstation 4""},
""Price"":""59.99""
}
]
},
{
""EAN"":""5030944112878"",
""GameName"":""Fifa 16"",
""Language"":""en"",
""GameGenres"":
[
{
""GameId"": ""5030944112878"",
""Genre"":{
""GenreId"":""1"",
""GenreName"":""Actie""}
},
{
""GameId"": ""5030944112878"",
""Genre"":{
""GenreId"":""12"",
""GenreName"":""Sport""}
}
],
""PlatformGames"":
[
{
""GameId"":""5030944112878"",
""Platform"":{
""PlatformId"":""1"",
""PlatformName"":""PC""},
""Price"":""34.99""
},
{
""GameId"":""5030944112878"",
""Platform"":{
""PlatformId"":""2"",
""PlatformName"":""Playstation 4""},
""Price"":""39.99""
},
{
""GameId"":""5030944112878"",
""Platform"":{
""PlatformId"":""3"",
""PlatformName"":""Xbox One""},
""Price"":""39.99""
}
]
},
{
""EAN"":""5030948112294"",
""GameName"":""De Sims 4"",
""Language"":""nl"",
""GameGenres"":
[
{
""GameId"": ""5030948112294"",
""Genre"":{
""GenreId"":""11"",
""GenreName"":""Simulatie""}
}
],
""PlatformGames"":
[
{
""GameId"":""5030948112294"",
""Platform"":{
""PlatformId"":""1"",
""PlatformName"":""PC""},
""Price"":""71.08""
}
]
},
{
""EAN"":""5030949112576"",
""GameName"":""Star Wars Battlefront"",
""Language"":""en"",
""GameGenres"":
[
{
""GameId"": ""5030949112576"",
""Genre"":{
""GenreId"":""2"",
""GenreName"":""Avontuur""}
},
{
""GameId"": ""5030949112576"",
""Genre"":{
""GenreId"":""10"",
""GenreName"":""Shooter""}
}
],
""PlatformGames"":
[
{
""GameId"":""5030949112576"",
""Platform"":{
""PlatformId"":""1"",
""PlatformName"":""PC""},
""Price"":""24.99""
},
{
""GameId"":""5030949112576"",
""Platform"":{
""PlatformId"":""2"",
""PlatformName"":""Playstation 4""},
""Price"":""24.99""
},
{
""GameId"":""5030949112576"",
""Platform"":{
""PlatformId"":""3"",
""PlatformName"":""Xbox One""},
""Price"":""34.99""
}
]
},
{
""EAN"":""5055856403357"",
""GameName"":""Doom"",
""Language"":""en"",
""GameGenres"":
[
{
""GameId"": ""5055856403357"",
""Genre"":{
""GenreId"":""1"",
""GenreName"":""Actie""}
}
],
""PlatformGames"":
[
{
""GameId"":""5055856403357"",
""Platform"":{
""PlatformId"":""1"",
""PlatformName"":""PC""},
""Price"":""49.99""
},
{
""GameId"":""5055856403357"",
""Platform"":{
""PlatformId"":""2"",
""PlatformName"":""Playstation 4""},
""Price"":""59.99""
},
{
""GameId"":""5055856403357"",
""Platform"":{
""PlatformId"":""3"",
""PlatformName"":""Xbox One""},
""Price"":""59.99""
}
]
},
{
""EAN"":""5060146463188"",
""GameName"":""Minecraft Story Mode"",
""Language"":""nl"",
""GameGenres"":
[
{
""GameId"": ""5060146463188"",
""Genre"":{
""GenreId"":""2"",
""GenreName"":""Avontuur""}
}
],
""PlatformGames"":
[
{
""GameId"":""5060146463188"",
""Platform"":{
""PlatformId"":""2"",
""PlatformName"":""Playstation 4""},
""Price"":""30.99""
},
{
""GameId"":""5060146463188"",
""Platform"":{
""PlatformId"":""3"",
""PlatformName"":""Xbox One""},
""Price"":""31.99""
},
{
""GameId"":""5060146463188"",
""Platform"":{
""PlatformId"":""4"",
""PlatformName"":""Wii U""},
""Price"":""39.99""
}
]
},
{
""EAN"":""5055856406136"",
""GameName"":""Fallout 4"",
""Language"":""en"",
""GameGenres"":
[
{
""GameId"": ""5055856406136"",
""Genre"":{
""GenreId"":""1"",
""GenreName"":""Actie""}
},
{
""GameId"": ""5055856406136"",
""Genre"":{
""GenreId"":""2"",
""GenreName"":""Avontuur""}
},
{
""GameId"": ""5055856406136"",
""Genre"":{
""GenreId"":""5"",
""GenreName"":""Open wereld""}
},
{
""GameId"": ""5055856406136"",
""Genre"":{
""GenreId"":""9"",
""GenreName"":""Role Playing Game""}
},
{
""GameId"": ""5055856406136"",
""Genre"":{
""GenreId"":""10"",
""GenreName"":""Shooter""}
}
],
""PlatformGames"":
[
{
""GameId"":""5055856406136"",
""Platform"":{
""PlatformId"":""1"",
""PlatformName"":""PC""},
""Price"":""114.4""
},
{
""GameId"":""5055856406136"",
""Platform"":{
""PlatformId"":""2"",
""PlatformName"":""Playstation 4""},
""Price"":""264.99""
},
{
""GameId"":""5055856406136"",
""Platform"":{
""PlatformId"":""3"",
""PlatformName"":""Xbox One""},
""Price"":""114.99""
}
]
}
]
}";
有人知道我做错了什么吗?
GamerContext
using Gamer.DomainClasses.Models;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Gamer.DataLayer
{
public class GamerContext : DbContext
{
public GamerContext() : base("Gamer")
{ }
public DbSet<Game> Games { get; set; }
public DbSet<Genre> Genres { get; set; }
public DbSet<PlatformGames> PlatformGames { get; set; }
public DbSet<Platform> Platforms { get; set; }
public DbSet<GameGenres> GameGenres { get; set; }
}
}
【问题讨论】:
-
显然你的 json 不能反序列化为对象 GamerContext。检查 _json 字符串以确保它没问题。看起来 Context 类似于 DatabaseContext 或者你不能从简单的字符串创建 Context 对象。
-
@inser 添加了我的 json 字符串
-
我认为你需要创建一个新的业务类来包含所有这些属性(你的 json 有什么)并使用它。上下文是更复杂的对象,不可序列化。
-
或者使用动态 :)
标签: c# json entity-framework-migrations