私はいくつかのRESTサービスの呼び出しを行い、結果をデシリアライズしてC#オブジェクトに入れています。すべては本を読んでかなり多くを見て、ほとんどの部分すべてがうまくあるため、しかし私は、デシリアライザをオフにスローし、非常に有用ではないエラーメッセージが表示できます私のJSONの一つのセクションがあります:オブジェクトをデシリアライズするときNewtonsoft.Jsonが有効なJSONのデシリアライズに失敗しました
予期しないトークンを:StartObject。パス「1をchannels.results」、行1、位置
636は、だから私は行って、私が間違っていたかを把握できたかどうかを確認するために私のコードとJSONのその部分を単離し、現在私はこれを持っている:https://dotnetfiddle.net/RWpwtnまた、(それは少なくとも大部分は、動作しているようですダイナミックにキャストしてしまった場合も)その失敗:
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);
}
}
誰もがこれを引き起こしている可能性があります何についてどのような考えを持っていますか?
dotnetfiddlesはそうあなたが同様にあなたの質問へのコードのすべてを貼り付けます(ただし、すべての手段によってフィドルへのリンクを維持する)必要がありますlinkrotすることができます。 – Default
私は未来のことを念頭に置いておきます – bnm12