如何将json(newtonsoft)反序列化为嵌套的静态类

时间:2016-01-27 05:36:14

标签: c# json json.net

我有一个带有静态属性的嵌套类,如下所示:

public class A {
    public class B {
        public static string BString = null;
    }
}

这是JSON:

{
    B {
        "BString" : "Hello"
    }
}

我想反序列化这个JSON,以便它设置嵌套的静态值(A.B.BString应该包含字符串Hello)。我不太了解newtonsoft,但有没有办法让它做到这一点,而不必我实例化B类。 我根本不想更改类以使其工作。我知道您可以将[JsonProperty]添加到静态属性以使其正确反序列化但这不适用于嵌套类。

1 个答案:

答案 0 :(得分:1)

通常,您不能在静态类上使用序列化。如果有一个包含两个不同A类的列表,哪个类将赢得比赛并设置静态B值?

<强>问题: 您是否真的有必要使用嵌套(静态)类?它背后的原因是什么?为什么不使用非嵌套类?

如果你真的想要实现它,可能会有一个解决方法:创建一个新属性,其中设置和检索静态值。希望这个新属性将被(de)序列化。

看到这个肮脏的例子:

public class A
{
    public B SetBProperty 
    { 
        get { return B.BString; } 
        set { B.BString = value; } 
    }

    public class B {
        public static string BString = null;
    }
}

请记住,在List<A>(de)序列化的情况下,最后一个(de)序列化项目将获胜并设置该值。