StreamReader 和 JsonTextReader 的反序列化不起作用
Posted
技术标签:
【中文标题】StreamReader 和 JsonTextReader 的反序列化不起作用【英文标题】:Deserializetion with StreamReader and JsonTextReader not working 【发布时间】: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;
【问题讨论】:
【参考方案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;
【讨论】:
以上是关于StreamReader 和 JsonTextReader 的反序列化不起作用的主要内容,如果未能解决你的问题,请参考以下文章
HTTPWebResponse + StreamReader 非常慢