我想读入id,但不想在读入后设置它。在读取文件并反序列化时设置\u处理变量,以便可以对其进行设置。有没有一种内置的更优雅的处理方式?
private string _id;
[JsonProperty(PropertyName = "id")]
public string id
{
get { return _id; }
set
{
if (_processing) // Only allow when reading the file
{
_id = value;
}
}
}
我认为只使用私人设置器就可以了。只是不要再调用它了。如果这些是相同的,您也可以省略属性名称。
private string _id;
[JsonProperty(PropertyName = "id")]
public string id
{
get { return _id; }
private set
{
_id = value;
}
}
或
[JsonProperty]
public string id { get; private set; }
在C#7.3及更早版本中,可以使用空合并运算符,如下所示:
set
{
_id = _id ?? value;
}
在C#8.0及更高版本中,您可以执行以下操作:
set
{
_id ??= value;
}
??=如果左侧操作数的计算结果为非空,则运算符不计算其右侧操作数。
如果可以使用仅初始化属性(自C#9.0起)(https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/init):
[JsonProperty(PropertyName = "id")]
public string Id { get; init; }
如果不是。。。
private string _id;
[JsonProperty(PropertyName = "id")]
public string Id
{
get { return _id; }
set { _id ??= value; }
}
有关设置默认属性值(如果在json中找不到)的无关但有用的链接:json缺少属性的默认值。网
我的JSON字符串是: 我想要实现的是,当JSON中没有提供schemaVersion时,能够在默认情况下反序列化到SubClassV1,但即使在Superclass中将schemaVersion初始化为“1.0”时,我仍然会收到以下错误:
问题内容: 我有一个简单的接口与属性的getter和setter。 我还有另一个实现此接口的UserAccount类。 我的问题是我想序列化money属性,但在反序列化它时忽略它,即,不接受用户对此属性的任何值。我在setter上尝试过@JsonIgnore,在getter上尝试过@JsonIgnore(false),它确实会忽略它,但是在序列化它时也会这样做。 我在setter上尝试了@Json
我有另一个类UserAccount实现了这个接口。 我的问题是,我想序列化money属性,但在反序列化时忽略它,即不接受用户对该属性的任何值。我在setter上尝试了@jsonIgnore,在getter上尝试了@jsonIgnore(false),它确实忽略了它,但是它在序列化它的同时也忽略了它。 我在setter上尝试了@jsonIgnore,在getter上尝试了@jsonProperty,
关于这个问题: 如何在使用JSON.NET序列化时更改属性名称? 会像预期的那样反序列化。 作为一个解决方案,没有属性也可以工作,或者类上有一个属性,比如:
问题内容: 我如何才能序列化一个特定的属性,但又防止其反序列化回POCO?是否可以使用属性装饰特定属性? 基本上,我正在寻找一个与ShouldSerialize *方法等效的反序列化方法。 我知道我可以编写一个自定义转换器,但是这样做似乎有点过头了。 编辑: 这里还有一些背景。这背后的原因是我的课看起来像: 我需要请求的属性,但是我不希望它反序列化并触发设置程序逻辑。 问题答案: 最简单的方法是将