【问题标题】:ServiceStack.Text deserialize string into single object null referenceServiceStack.Text 将字符串反序列化为单个对象空引用
【发布时间】:2015-06-05 01:05:05
【问题描述】:

我有以下代码。使用 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; }
    }

【问题讨论】:

    标签: c# .net json servicestack


    【解决方案1】:

    默认情况下,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&lt;T&gt;(string) 扩展方法,例如:

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

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

    【讨论】:

    • 我已经试过property方法了,这段代码也产生了null。
    • @CowKing 看我的更新,你需要使用JsonSerializer 类或者ToJson/FromJson 扩展方法。
    • 成功了,谢谢!我猜这个错误是我不理解 JSON 和 JSV 之间的区别的错。
    猜你喜欢
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 2014-01-04
    • 2015-01-29
    相关资源
    最近更新 更多