В моем случае у меня была эта проблема, когда я создавал резервную копию базы данных, используя выходные / выходные символы перенаправления linux. Поэтому я изменяю синтаксис, как описано ниже. PS: использование терминала linux или mac.
Резервное копирование (без> перенаправления)
# mysqldump -u root -p databasename -r bkp.sql
Восстановить (без & lt; redirect)
# mysql -u root -p --default-character-set = utf8 databasename mysql & gt; Имена SET «utf8» mysql & gt; SOURCE bkp.sql
Ошибка «Указанный ключ был слишком длинным, максимальная длина ключа - 767 байт» исчезла.
Похоже, вы пытаетесь десериализоваться на необработанный объект. Вы можете создать класс, который представляет объект, к которому вы конвертируете.
Например:
class Test {
String test;
String getTest() { return test; }
void setTest(String test) { this.test = test; }
}
Тогда ваш десериализационный код будет выглядеть следующим образом:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
Test routes_list =
(Test)json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
Более подробную информацию можно найти в этом учебнике: http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-Csharp.aspx
Сначала вы должны включить библиотеку, например:
using System.Runtime.Serialization.Json;
DataContractJsonSerializer desc = new DataContractJsonSerializer(typeof(BlogSite));
string json = "{\"Description\":\"Share knowledge\",\"Name\":\"zahid\"}";
using (var ms = new MemoryStream(ASCIIEncoding.ASCII.GetBytes(json)))
{
BlogSite b = (BlogSite)desc.ReadObject(ms);
Console.WriteLine(b.Name);
Console.WriteLine(b.Description);
}
Вот простой класс, который я вымотал из разных сообщений .... Он был протестирован около 15 минут, но кажется работать для моих целей. Он использует JavascriptSerializer
для выполнения работы, на которую можно ссылаться в вашем приложении, используя подробную информацию в этом сообщении .
Нижеприведенный код может быть запущен в LinqPad для его проверки out:
Надеюсь, что это поможет!
void Main()
{
string json = @"
{
'glossary':
{
'title': 'example glossary',
'GlossDiv':
{
'title': 'S',
'GlossList':
{
'GlossEntry':
{
'ID': 'SGML',
'ItemNumber': 2,
'SortAs': 'SGML',
'GlossTerm': 'Standard Generalized Markup Language',
'Acronym': 'SGML',
'Abbrev': 'ISO 8879:1986',
'GlossDef':
{
'para': 'A meta-markup language, used to create markup languages such as DocBook.',
'GlossSeeAlso': ['GML', 'XML']
},
'GlossSee': 'markup'
}
}
}
}
}
";
var d = new JsonDeserializer(json);
d.GetString("glossary.title").Dump();
d.GetString("glossary.GlossDiv.title").Dump();
d.GetString("glossary.GlossDiv.GlossList.GlossEntry.ID").Dump();
d.GetInt("glossary.GlossDiv.GlossList.GlossEntry.ItemNumber").Dump();
d.GetObject("glossary.GlossDiv.GlossList.GlossEntry.GlossDef").Dump();
d.GetObject("glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso").Dump();
d.GetObject("Some Path That Doesnt Exist.Or.Another").Dump();
}
// Define other methods and classes here
public class JsonDeserializer
{
private IDictionary<string, object> jsonData { get; set; }
public JsonDeserializer(string json)
{
var json_serializer = new JavaScriptSerializer();
jsonData = (IDictionary<string, object>)json_serializer.DeserializeObject(json);
}
public string GetString(string path)
{
return (string) GetObject(path);
}
public int? GetInt(string path)
{
int? result = null;
object o = GetObject(path);
if (o == null)
{
return result;
}
if (o is string)
{
result = Int32.Parse((string)o);
}
else
{
result = (Int32) o;
}
return result;
}
public object GetObject(string path)
{
object result = null;
var curr = jsonData;
var paths = path.Split('.');
var pathCount = paths.Count();
try
{
for (int i = 0; i < pathCount; i++)
{
var key = paths[i];
if (i == (pathCount - 1))
{
result = curr[key];
}
else
{
curr = (IDictionary<string, object>)curr[key];
}
}
}
catch
{
// Probably means an invalid path (ie object doesn't exist)
}
return result;
}
}
object routes_list
. Используйте var
или явно повторяйте себя и объявите route_list как IDictionary & lt; string, object & gt ;.
– mattmc3
6 January 2011 в 03:06
Использование динамического объекта с JavaScriptSerializer.
JavaScriptSerializer serializer = new JavaScriptSerializer();
dynamic item = serializer.Deserialize<object>("{ \"test\":\"some data\" }");
string test= item["test"];
//test Result = "some data"
Еще один быстрый и простой способ полуавтоматизировать эти шаги:
Теперь используйте код, например:
WebClient client = new WebClient();
string myJSON = client.DownloadString("https://URL_FOR_JSON.com/JSON_STUFF");
var myClass = Newtonsoft.Json.JsonConvert.DeserializeObject(myJSON);
Или вы можете использовать библиотеку Newtonsoft.Json следующим образом:
using Newtonsoft.Json;
...
var result = JsonConvert.DeserializeObject<T>(json);
Где T
- ваш тип объекта, который соответствует вашей строке JSON.
Вы можете легко выполнить свое требование, используя библиотеку Newtonsoft.Json.
Класс для типа получаемого вами объекта:
public class User
{
public int ID { get; set; }
public string Name { get; set; }
}
Код:
static void Main(string[] args)
{
string json = "{\"ID\": 1, \"Name\": \"Abdullah\"}";
User user = JsonConvert.DeserializeObject<User>(json);
Console.ReadKey();
}
это очень простой способ разобрать ваш json.
Преобразование строки JSON в объект в C #. Используя ниже тестовый пример, он работал на меня. Здесь «MenuInfo» - мой объект класса C #.
JsonTextReader reader = null;
try
{
WebClient webClient = new WebClient();
JObject result = JObject.Parse(webClient.DownloadString("YOUR URL"));
reader = new JsonTextReader(new System.IO.StringReader(result.ToString()));
reader.SupportMultipleContent = true;
}
catch(Exception)
{}
JsonSerializer serializer = new JsonSerializer();
MenuInfo menuInfo = serializer.Deserialize<MenuInfo>(reader);
Newtonsoft быстрее, чем сериализатор сценариев Java. ... это зависит от пакета Newtonsoft NuGet, который является популярным и лучше, чем сериализатор по умолчанию.
решение для одной строки.
var myclass = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(Jsonstring);
Myclass oMyclass = Newtonsoft.Json.JsonConvert.DeserializeObject<Myclass>(Jsonstring);
добавьте этот ddl для ссылки на ваш проект: System.Web.Extensions.dll
используют это пространство имен: using System.Web.Script.Serialization;
public class IdName
{
public int Id { get; set; }
public string Name { get; set; }
}
string jsonStringSingle = "{'Id': 1, 'Name':'Thulasi Ram.S'}".Replace("'", "\"");
var entity = new JavaScriptSerializer().Deserialize<IdName>(jsonStringSingle);
string jsonStringCollection = "[{'Id': 2, 'Name':'Thulasi Ram.S'},{'Id': 2, 'Name':'Raja Ram.S'},{'Id': 3, 'Name':'Ram.S'}]".Replace("'", "\"");
var collection = new JavaScriptSerializer().Deserialize<IEnumerable<IdName>>(jsonStringCollection);