StreamReader 和 JsonTextReader 的反序列化不起作用

Deserializetion with StreamReader and JsonTextReader not working

我正在写一个反序列化方法,但是反序列化后的对象没有填充任何值。我正在测试 class.

中测试方法的核心
    [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);
            }
        }
    }

这是我的测试class我正在尝试填充

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

Newtonsoft Json.NET 默认情况下没有 serialize/deserialize 私有属性,因此您需要将它们设为 public,或者用 JsonPropertyAttribute:

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

或者:

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

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

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

接下来是 newtonsoft 属性必须是 public :

 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; }