ServiceStack.Text 将字符串反序列化为单个对象空引用
ServiceStack.Text deserialize string into single object null reference
我有以下代码。使用 JSON.NET 它工作正常,我可以将字符串反序列化为 CustomMaker 对象。使用 ServiceStack.Text 我得到空值。我试过做 { get;放; } 并删除和添加构造函数。
使用 JSON.NET 它就像 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() { }
}
编辑:此代码还会生成空值:
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 仅序列化 public 属性,因此您可以重构 DTO 以包含属性,例如:
public class CustomMaker {
public int UserID { get; set; }
public String error { get; set; }
}
或者,如果您想序列化 public 个字段,您可以指定为:
JsConfig.IncludePublicFields = true;
还需要使用JsonSerializer
class,例如:
CustomMaker xSLBM = JsonSerializer.DeserializeFromString<CustomMaker>(xString);
或string.ToJson()
或T.FromJson<T>(string)
扩展方法,例如:
CustomMaker xSLBM = xString.FromJson<CustomMaker>();
TypeSerializer
class仅适用于serializing/deserializingJSV Format,不适用于JSON。
我有以下代码。使用 JSON.NET 它工作正常,我可以将字符串反序列化为 CustomMaker 对象。使用 ServiceStack.Text 我得到空值。我试过做 { get;放; } 并删除和添加构造函数。
使用 JSON.NET 它就像 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() { }
}
编辑:此代码还会生成空值:
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 仅序列化 public 属性,因此您可以重构 DTO 以包含属性,例如:
public class CustomMaker {
public int UserID { get; set; }
public String error { get; set; }
}
或者,如果您想序列化 public 个字段,您可以指定为:
JsConfig.IncludePublicFields = true;
还需要使用JsonSerializer
class,例如:
CustomMaker xSLBM = JsonSerializer.DeserializeFromString<CustomMaker>(xString);
或string.ToJson()
或T.FromJson<T>(string)
扩展方法,例如:
CustomMaker xSLBM = xString.FromJson<CustomMaker>();
TypeSerializer
class仅适用于serializing/deserializingJSV Format,不适用于JSON。