Я использую Newtonsoft json.net. Их документация не очень полезна. Строка JSON никогда не была объектом этого класса, я получил ее, используя WebRequest. Когда я получил формат -индивидуальность «входная строка была не в правильном формате». Я думал, что что -то должно быть не так с моими занятиями. Затем я нашел этот веб -сайт: http://json2csharp.com/образное время Это должно генерировать классы, необходимые для вас, так что вы можете починить любую строку JSON. Помимо генерирования 3 разных классов для одного и того же типа (изображение), веб -сайт сгенерировал те же классы, которые у меня были, с разными именами здесь и там (для классов, никогда не свойства). Это классы: < /p>
public class Image
{
public string full { get; set; }
public string sprite { get; set; }
public string group { get; set; }
public int x { get; set; }
public int y { get; set; }
public int w { get; set; }
public int h { get; set; }
}
public class Skin
{
public int id { get; set; }
public string name { get; set; }
public int num { get; set; }
}
public class Info
{
public int attack { get; set; }
public int defense { get; set; }
public int magic { get; set; }
public int difficulty { get; set; }
}
public class Stats
{
public double armor { get; set; }
public int armorperlevel { get; set; }
public int attackdamage { get; set; }
public double attackdamageperlevel { get; set; }
public int attackrange { get; set; }
public double attackspeedoffset { get; set; }
public double attackspeedperlevel { get; set; }
public int crit { get; set; }
public int critperlevel { get; set; }
public int hp { get; set; }
public int hpperlevel { get; set; }
public double hpregen { get; set; }
public double hpregenperlevel { get; set; }
public int movespeed { get; set; }
public int mp { get; set; }
public int mpperlevel { get; set; }
public double mpregen { get; set; }
public double mpregenperlevel { get; set; }
public int spellblock { get; set; }
public int spellblockperlevel { get; set; }
}
public class Leveltip
{
public List label { get; set; }
public List effect { get; set; }
}
public class Image2
{
public string full { get; set; }
public string sprite { get; set; }
public string group { get; set; }
public int x { get; set; }
public int y { get; set; }
public int w { get; set; }
public int h { get; set; }
}
public class Var
{
public string key { get; set; }
public string link { get; set; }
public List coeff { get; set; }
}
public class Altimage
{
public string full { get; set; }
public string sprite { get; set; }
public string group { get; set; }
public int x { get; set; }
public int y { get; set; }
public int w { get; set; }
public int h { get; set; }
}
public class Spell
{
public string name { get; set; }
public string description { get; set; }
public string sanitizedDescription { get; set; }
public string tooltip { get; set; }
public string sanitizedTooltip { get; set; }
public Leveltip leveltip { get; set; }
public Image2 image { get; set; }
public string resource { get; set; }
public int maxrank { get; set; }
public List cost { get; set; }
public string costType { get; set; }
public string costBurn { get; set; }
public List cooldown { get; set; }
public string cooldownBurn { get; set; }
public List effect { get; set; }
public List effectBurn { get; set; }
public List vars { get; set; }
public object range { get; set; }
public string rangeBurn { get; set; }
public string key { get; set; }
public List altimages { get; set; }
}
public class Image3
{
public string full { get; set; }
public string sprite { get; set; }
public string group { get; set; }
public int x { get; set; }
public int y { get; set; }
public int w { get; set; }
public int h { get; set; }
}
public class Passive
{
public string name { get; set; }
public string description { get; set; }
public string sanitizedDescription { get; set; }
public Image3 image { get; set; }
}
public class Item
{
public int id { get; set; }
public int count { get; set; }
}
public class Block
{
public string type { get; set; }
public List items { get; set; }
public bool? recMath { get; set; }
}
public class Recommended
{
public string champion { get; set; }
public string title { get; set; }
public string type { get; set; }
public string map { get; set; }
public string mode { get; set; }
public bool priority { get; set; }
public List blocks { get; set; }
}
public class RootObject
{
public int id { get; set; }
public string key { get; set; }
public string name { get; set; }
public string title { get; set; }
public Image image { get; set; }
public List skins { get; set; }
public string lore { get; set; }
public string blurb { get; set; }
public List allytips { get; set; }
public List enemytips { get; set; }
public List tags { get; set; }
public string partype { get; set; }
public Info info { get; set; }
public Stats stats { get; set; }
public List spells { get; set; }
public Passive passive { get; set; }
public List recommended { get; set; }
}
< /code>
Это код, который генерирует исключение: < /p>
RootObject result = JsonConvert.DeserializeObject(jsonString);
< /code>
Я все еще получаю одинаковое формирование в этой строке. Перед тем, как достичь исключения, хотя я сохраняю строку в текстовый файл, а затем я могу визуализировать его с помощью этого программного обеспечения без каких -либо ошибок: http://jsonviewer.codeplex.com/
Я могу просматривать ее структуру дерева и ее необработанную структуру текста (индикативное для чтения), и нет ничего плохого в строке. Пожалуйста, может кто -нибудь помочь? Я не знаю, что еще делать. Подробная информация о исключении, как задаваемое: < /p>
System.FormatException was unhandled
HResult=-2146233033
Message=Input string was not in a correct format.
Source=Newtonsoft.Json
StackTrace:
em Newtonsoft.Json.Utilities.ConvertUtils.Int32Parse(Char[] chars, Int32 start, Int32 length) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Utilities\ConvertUtils.cs:linha 608
em Newtonsoft.Json.JsonTextReader.ParseNumber() na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\JsonTextReader.cs:linha 1199
em Newtonsoft.Json.JsonTextReader.ParseValue() na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\JsonTextReader.cs:linha 1009
em Newtonsoft.Json.JsonTextReader.ReadInternal() na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\JsonTextReader.cs:linha 383
em Newtonsoft.Json.JsonReader.ReadAsInt32Internal() na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\JsonReader.cs:linha 577
em Newtonsoft.Json.JsonTextReader.ReadAsInt32() na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\JsonTextReader.cs:linha 339
em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader, JsonContract contract, Boolean hasConverter) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:linha 1646
em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:linha 1276
em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:linha 644
em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:linha 256
em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:linha 763
em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:linha 1774
em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:linha 384
em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:linha 254
em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:linha 1276
em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:linha 644
em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:linha 256
em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:linha 763
em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:linha 1774
em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:linha 384
em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:linha 254
em Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:linha 177
em Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\JsonSerializer.cs:linha 711
em Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\JsonSerializer.cs:linha 663
em Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\JsonConvert.cs:linha 797
em Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\JsonConvert.cs:linha 757
em Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value) na c:\Temp\Release\Working\Newtonsoft.Json\Src\Newtonsoft.Json\JsonConvert.cs:linha 694
em LoLWebRequests.LoLWeb.WebGETChampion(String realm, Int32 id) na c:\Users\Charon\Documents\Visual Studio 2012\Projects\LoLWebAPI\LoLWebRequests\LoLWeb.cs:linha 23
em ConsoleTestApp.Program.Main(String[] args) na c:\Users\Charon\Documents\Visual Studio 2012\Projects\LoLWebAPI\ConsoleTestApp\Program.cs:linha 14
em System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
em System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
em Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
em System.Threading.ThreadHelper.ThreadStart_Context(Object state)
em System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
em System.Threading.ThreadHelper.ThreadStart()
InnerException:
< /code>
Вот код, который я использую для получения JSON: < /p>
string uri = https://na.api.pvp.net//api/lol/static- ... pi_key=XXX" //key ommited
Uri serviceUri = new Uri(uri);
WebClient downloader = new WebClient();
string jsonWebResult;
try
{
Stream responseStream = downloader.OpenRead(serviceUri);
using (StreamReader sr = new StreamReader(responseStream))
{
jsonWebResult = sr.ReadToEnd();
}
}
catch (WebException webEx)
{
throw webEx;
}
RootObject result = JsonConvert.DeserializeObject(jsonWebResult);
Подробнее здесь: https://stackoverflow.com/questions/241 ... ite-object