Ich mache einige Aufrufe einiger REST-Dienste und Deserialisierung der Ergebnisse, die ich in C# -Objekten bekomme. Alles sieht ziemlich viel von dem Buch, und zum größten Teil alles in Ordnung ist, aber habe ich einen Teil meiner JSON, die die Deserializer abwirft und gibt die nicht sehr hilfreich Fehlermeldung:Newtonsoft.Json schlägt das Deserialisieren von gültigem JSON fehl
unerwartetes Token, wenn Deserialisieren Objekt : Startobjekt. Pfad ‚channels.results 1‘, Zeile 1, Position 636.
Also ging ich und isoliert, dass ein Teil meines Codes und JSON, um zu sehen, ob ich herausfinden konnte, was los war, und zur Zeit habe ich dies: https://dotnetfiddle.net/RWpwtn die nicht auch (Obwohl, wenn es zu einem dynamischen gegossen wird so scheint es, zumindest zum größten Teil zu arbeiten):
using System;
using Newtonsoft.Json;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
string JSON = "{\"id\" : 19,\"name\" : \"Vidensdeling\",\"sortOrder\" : 0,\"breakRightsInheritance\" : false,\"canContainItems\" : false,\"external\" : false,\"canOnlyEditItsOwn\" : null,\"parentChannelId\" : null,\"inheritedParentChannelId\" : null,\"itemCount\" : 0,\"permissionTarget\" : null,\"permissionTargetType\" : null,\"childChannelIds\" : [],\"contentTypeIds\" : [],\"mandatoryPrincipalIds\" : [],\"suggestedPrincipalIds\" : [],\"readRightsPrincipalIds\" : [],\"writeRightsPrincipalIds\" : [],\"visibleInCurrentView\" : null,\"mandatoryForCurrentUser\" : null,\"suggestedForCurrentUser\" : null,\"personalSelectedForCurrentUser\" : null,\"writeAllowedForCurrentUser\" : null,\"readAllowedForCurrentUser\" : null}";
ChannelDtoV1 obj = JsonConvert.DeserializeObject<ChannelDtoV1>(JSON);
Console.WriteLine(obj.Id);
}
}
public class ChannelDtoV1
{
//Data properties
public int Id { get; set; }
public string Name { get; set; }
public int SortOrder { get; set; }
public bool BreakRightsInheritance { get; set; }
public bool CanContainItems { get; set; }
public bool External { get; set; }
public bool? CanOnlyEditItsOwn { get; set; }
public int? ParentChannelId { get; set; }
public int? InheritedParentChannelId { get; set; }
public int ItemCount { get; set; }
public string PermissionTarget { get; set; }
[JsonConverter(typeof(KVPEnumConverter<PermissionTargetType>))]
public PermissionTargetType? PermissionTargetType { get; set; }
//Collection properties
public ICollection<int> ChildChannelIds { get; set; }
public ICollection<int> ContentTypeIds { get; set; }
public ICollection<int> MandatoryPrincipalIds { get; set; }
public ICollection<int> SuggestedPrincipalIds { get; set; }
public ICollection<int> ReadRightsPrincipalIds { get; set; }
public ICollection<int> WriteRightsPrincipalIds { get; set; }
//Computed properties
public bool? VisibleInCurrentView { get; set; }
public bool? MandatoryForCurrentUser { get; set; }
public bool? SuggestedForCurrentUser { get; set; }
public bool? PersonalSelectedForCurrentUser { get; set; }
public bool? WriteAllowedForCurrentUser { get; set; }
public bool? ReadAllowedForCurrentUser { get; set; }
public ChannelDtoV1()
{
ChildChannelIds = new List<int>();
MandatoryPrincipalIds = new List<int>();
SuggestedPrincipalIds = new List<int>();
ReadRightsPrincipalIds = new List<int>();
WriteRightsPrincipalIds = new List<int>();
ContentTypeIds = new List<int>();
}
}
public enum PermissionTargetType
{
BussinessApp = 1
}
public class KVPEnumConverter<T> : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteStartObject();
writer.WritePropertyName("name");
writer.WriteValue(value.ToString());
writer.WritePropertyName("value");
writer.WriteValue((int)value);
writer.WriteEndObject();
}
public override bool CanConvert(Type objectType)
{
return objectType is T;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
object rtnObj = null;
while (reader.Read() && reader.TokenType != JsonToken.EndObject)
{
if (reader.TokenType == JsonToken.PropertyName && (string)reader.Value == "value")
{
reader.Read(); // proceed to value
rtnObj = Enum.Parse(typeof(T), reader.Value.ToString());
}
}
return rtnObj ?? default(T);
}
}
haben jemand eine Idee, was dies verursachen könnte?
dotnetfiddles kann linkrot so sollten Sie den gesamten Code in Ihre Frage als auch (aber mit allen Mitteln halten Sie den Link auf die Geige) einfügen . – Default
Das werde ich mir für die Zukunft merken – bnm12