Xamarin项目中JsonConvert序列化对象返回{}问题求助
嘿,我来帮你搞定这个序列化后返回空对象的问题,我之前做Xamarin项目时也碰到过类似的坑,咱们一步步排查:
先检查实体类的[JsonProperty]特性
首先得确认你用的是Newtonsoft.Json的JsonProperty特性,很多时候新手容易引用错命名空间,导致这个特性根本没生效。你需要在TodoItem类的顶部加上:
using Newtonsoft.Json;
如果没加这个命名空间,那你写的[JsonProperty]等于白写,序列化器根本识别不到这些属性,自然就输出{}了。
另外,也可以试试给JsonProperty显式指定字段名,有时候默认的序列化规则可能因为大小写或者映射问题没识别到属性,修改后的实体类可以这样写:
public class TodoItem { [JsonProperty("id")] public string ID { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonProperty("notes")] public string Notes { get; set; } [JsonProperty("done")] public bool Done { get; set; } }
检查序列化代码的配置
你只给了SaveTodoItemAsync的方法头,我猜里面应该是用JsonConvert.SerializeObject(item)来序列化的?这里要注意有没有开启忽略空值的设置:
如果你写了类似下面的代码,当item的所有属性都是null或者默认值(比如Done是false)时,就会输出{}:
var json = JsonConvert.SerializeObject(item, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
如果不需要忽略空值,把这个配置去掉就行;如果确实需要忽略空值,那得确保item至少有一个属性是非默认值(比如给Name赋值个字符串),这样序列化后才会有内容。
最后检查传入的item对象本身
有时候问题出在源头——你传入的item对象的属性根本没赋值!比如调用SaveTodoItemAsync时,item的ID、Name都是null,Done是默认的false,这种情况下就算序列化配置没问题,也可能因为所有值都是默认状态而返回空对象(尤其是开了忽略空值的话)。所以先确认调用方法前,item的属性已经被正确赋值了。
内容的提问来源于stack exchange,提问作者CodeName

