ServiceStack.文本反序列化字符串为单个对象空引用
本文关键字:对象 引用 单个 文本 反序列化 字符串 ServiceStack | 更新日期: 2023-09-27 17:53:49
我有以下代码。与JSON。NET它工作得很好,我可以反序列化字符串到CustomMaker对象。ServiceStack。文本得到null。我试过{get;设置;}以及删除和添加构造函数。
与JSON。它的工作方式就像JsonConvert.DeserializeObject(xString);
你知道为什么ServiceStack.Text不能工作吗?
static void Main(string[] args) {
string xString = "{'"error'":'"Invalid token 1 #556264'"}";
Console.WriteLine(xString);
CustomMaker xSLBM = TypeSerializer.DeserializeFromString<CustomMaker>(xString);
Console.WriteLine(string.IsNullOrWhiteSpace(xSLBM.error) ? "error is null" : xSLBM.error);
Console.ReadLine();
}
[Serializable]
public class CustomMaker {
public int UserID;
public String error;
public CustomMaker() { }
}
编辑:这段代码也产生null:
static void Main(string[] args) {
JsConfig.IncludePublicFields = true;
string xString = "{'"error'":'"Invalid token 1 #556264'"}";
Console.WriteLine(xString);
CustomMaker xSLBM = TypeSerializer.DeserializeFromString<CustomMaker>(xString);
Console.WriteLine(string.IsNullOrWhiteSpace(xSLBM.error) ? "error is null" : xSLBM.error);
Console.ReadLine();
}
[Serializable]
public class CustomMaker {
public CustomMaker() { }
public int UserID { get; set; }
public String error { get; set; }
}
默认情况下ServiceStack只序列化公共属性所以你可以重构你的DTO来包含属性,例如:
public class CustomMaker {
public int UserID { get; set; }
public String error { get; set; }
}
或者如果你想序列化公共字段,你可以这样指定:
JsConfig.IncludePublicFields = true;
您还需要使用JsonSerializer
类,例如:
CustomMaker xSLBM = JsonSerializer.DeserializeFromString<CustomMaker>(xString);
或string.ToJson()
或T.FromJson<T>(string)
扩展方法,例如:
CustomMaker xSLBM = xString.FromJson<CustomMaker>();
TypeSerializer
类仅用于序列化/反序列化JSV格式,而不是JSON。