对object的DeserializeObject数组没有给出结果

本文关键字:结果 数组 object DeserializeObject | 更新日期: 2023-09-27 18:08:38

当我尝试反序列化从外部源接收的json时,我的程序在使用value.first()时不会映射子对象。

private Class1 class1List;
public List<Class1> Class1List
{
    get
    {
        return new List<Class1> { class1List };
    }
    set
    {
        class1List = value.First();
    }
}

如果我想让它工作,我必须将class1List更改为List,并且必须去除.First()。问题是List将始终只包含一个元素,对于内部存储和使用,如果我只能获得第一个元素并将其存储为对象,那将是最好的。我收到的json是不能修改的。(如果序列化我的对象json看起来是一样的)。

{
  "Class1List":[
    {"Class2List":[
      {"Name":"test"}
    ]}
]}

编辑:删除get使其工作编辑2:改变get到this也使它工作

get
{
    if (class1List != null)
    {
        return new List<Class1> { class1List };
    }
    return null;
}

对object的DeserializeObject数组没有给出结果

如果你特别不添加私人成员,我已经尝试了另一个解决方案

  var selctedList = JObject.Parse("YOUR JSON").SelectToken("Class1List").ToString();
  var class1List = JsonConvert.DeserializeObject<Class1[]>(selctedList, new Class1Converter());

  public class Class1
        {
            public string Name { get; set; }
        }
  public class Class1Converter : JsonCreationConverter<Class1>
        {
            protected override Class1 Create(Type objectType, JObject jObject)
            {
                return new Class1();
            }
        }
        public abstract class JsonCreationConverter<T> : JsonConverter
        {
            protected abstract T Create(Type objectType, JObject jObject);
            public override bool CanConvert(Type objectType)
            {
                return typeof(T).IsAssignableFrom(objectType);
            }
            public override object ReadJson(JsonReader reader,
                                            Type objectType,
                                             object existingValue,
                                             JsonSerializer serializer)
            {
                try
                {
                    // Load JObject from stream
                    JObject jObject = JObject.Load(reader);
                    var lp = jObject[jObject.Properties().Select(p => p.Name).FirstOrDefault()];
                    JObject kl = JsonConvert.DeserializeObject<JObject[]>(lp.ToString()).FirstOrDefault();
                    // Create target object based on JObject
                    T target = Create(objectType, kl);
                    // Populate the object properties
                    serializer.Populate(kl.CreateReader(), target);
                    return target;
                }
                catch (Exception er)
                {
                    throw er;
                }
            }
            public override void WriteJson(JsonWriter writer,
                                           object value,
                                           JsonSerializer serializer)
            {
                throw new NotImplementedException();
            }
        }

免责声明:我在某个地方读过,但我现在找不到来源,我的解释可能是错误的,但解决方案工作

Json。Net要求您返回Json的对象。解析过程中创建的。

class BaseClass
{
    internal Class1 class1List;
    private List<Class1> _class1List;
    public List<Class1> Class1List
    {
        get
        {
            return _class1List;
            // return new List<Class1> { class1List };
        }
        set
        {
            class1List = value.First();
            _class1List = value;
        }
    }
}