gpt4 book ai didi

c# - ServiceStack.Text 将字符串反序列化为单个对象空引用

转载 作者:行者123 更新时间:2023-11-30 16:07:31 24 4
gpt4 key购买 nike

我有以下代码。使用 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类,例如:

CustomMaker xSLBM = JsonSerializer.DeserializeFromString<CustomMaker>(xString);

string.ToJson()T.FromJson<T>(string)扩展方法,例如:

CustomMaker xSLBM = xString.FromJson<CustomMaker>();

TypeSerializer类仅用于序列化/反序列化 JSV Format ,而不是 JSON。

关于c# - ServiceStack.Text 将字符串反序列化为单个对象空引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30656725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com