【问题标题】:Deserializetion with StreamReader and JsonTextReader not workingStreamReader 和 JsonTextReader 的反序列化不起作用
【发布时间】:2020-11-25 13:35:33
【问题描述】:

我正忙于编写反序列化方法,但反序列化的对象没有填充任何值。我正在测试类中测试方法的核心。

    [TestMethod]
    public void DeserializeObject_WithReader()
    {
        string json = "{\"objectName\":\"joe\",\"objectAge\":30,\"objectDimensionX\":148.25,\"objectDimensionY\":95.87}";

        using (StringReader reader = new StringReader(json))
        {
            using (JsonTextReader jsonReader = new JsonTextReader(reader))
            {
                JsonSerializer ser = JsonSerializer.CreateDefault();
                var t = ser.Deserialize<SerializedObjectTestClass>(jsonReader);
            }
        }
    }

这是我要填充的测试类

public class SerializedObjectTestClass
{
    private string ObjectName { get; set; }
    private int ObjectAge { get; set; }
    private decimal ObjectDimensionX { get; set; }
    private decimal ObjectDimensionY { get; set; }
}

【问题讨论】:

    标签: c# json serialization json.net json-deserialization


    【解决方案1】:

    Newtonsoft Json.NET 默认情况下不会序列化/反序列化私有属性,因此您需要将它们公开,或者使用JsonPropertyAttribute 标记:

    public class SerializedObjectTestClass
    {
        public string ObjectName { get; set; }
        ....
    }
    

    或者:

    public class SerializedObjectTestClass
    {
        [JsonProperty]
        private string ObjectName { get; set; }
        ....
    }
    

    【讨论】:

      【解决方案2】:

      您可以一次反序列化整个对象:

      SerializedObjectTestClass obj = JsonConvert.DeserializeObject<SerializedObjectTestClass>(json);
      

      接下来的事情是 newtonsoft 的属性必须是公开的:

       public class SerializedObjectTestClass
       {
           public string ObjectName { get; set; }
           public int ObjectAge { get; set; }
           public decimal ObjectDimensionX { get; set; }
           public decimal ObjectDimensionY { get; set; }
      }
      

      您也可以在属性上方添加属性:

      [JsonProperty]
          private string Property{ get; set; }
      

      【讨论】:

        猜你喜欢
        • 2012-07-11
        • 2020-03-10
        • 2020-10-16
        • 2012-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多