Newtonsoft.Json反序列化JSON返回所有属性为null问题求助
问题原因
你的JSON结构最外层存在一层包裹对象,WSettings是外层对象的属性值,而非根节点直接对应WSettings类结构,因此直接反序列化时无法匹配到对应字段,返回的对象所有属性均为默认值null。
解决方案
方案1:新增外层包装类(推荐,改动最小)
新增根节点对应实体类:
public class RootObject { public WSettings WSettings { get; set; } }
修改反序列化代码为:
var root = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(File.ReadAllText(@"json.txt")); WSettings w = root.WSettings;
方案2:直接提取目标节点反序列化(无需新增类)
通过JObject先读取JSON结构,提取WSettings节点后再转换为对应实体:
var jobj = Newtonsoft.Json.Linq.JObject.Parse(File.ReadAllText(@"json.txt")); WSettings w = jobj["WSettings"].ToObject<WSettings>();
方案3:修改JSON结构(若允许调整JSON内容)
删除JSON最外层的包裹,直接保留WSettings对象的内容作为JSON根节点:
{ "Message":"\"We are the universe's way of experiencing itself.\"<br/>- Kurzgesagt -", "universalMessageProcChance":10, "Hi":{ "altName":"Hi", "normalState":"hi", "hState":"hi_h", "aState":"hi_a", "background":"bg_owo_r", "stateLayout":4, "backgroundLayout":1, "eventMessage":"Da" }, "Yu":{ "altName":"Al", "normalState":"al", "hState":"al_h", "aState":"ali_a", "background":"bg_owo_b", "stateLayout":4, "backgroundLayout":1, "eventMessage":"Da" } }
修改后原有反序列化代码可正常运行。
内容的提问来源于stack exchange,提问作者Mamhu
相关产品推荐
相关产品推荐

