私はJson.Netを使用して、クラスをjsonにシリアライズおよびデシリアライズします。
[JsonObject(ItemRequired = Required.Always)]
(またはRequired.Always
)新しい取得専用プロパティ。次のJsonSerializationException
になります。
Newtonsoft.Json.JsonSerializationException:必須プロパティ
'<PropertyName>'
JSONに見つかりません
そのプロパティをJsonIgnore
でマークすると問題は解決すると思いましたが、うまくいきません。
このプロパティを無視する必要があることをJson.Netに伝えるにはどうすればよいですか?
問題を再現する最小限の例を次に示します。
[JsonObject(ItemRequired = Required.Always)]
public class Hamster
{
public string FirstName { get; set; }
public string LastName { get; set; }
[JsonIgnore]
public string FullName { get { return FirstName + LastName; }}
}
private static void Main()
{
var hamster = new Hamster {FirstName = "Bar", LastName = "Arnon"};
var serializeObject = JsonConvert.SerializeObject(hamster);
var deserializeObject = JsonConvert.DeserializeObject<Hamster>(serializeObject);
}
この場合、明らかにJsonIgnore
はシリアル化のみを制御します。 JsonIgnore
は、FullName
プロパティをJSON表現にシリアル化しないことを指定するために必要です。
逆シリアル化中にプロパティを無視するには、Required = Required.Default
でJsonProperty
注釈を追加する必要があります(これは必須ではないことを意味します)。
したがって、これはJsonSerializationException
を回避する方法です。
[JsonObject(ItemRequired = Required.Always)]
public class Hamster
{
public string FirstName { get; set; }
public string LastName { get; set; }
[JsonIgnore]
[JsonProperty(Required = Required.Default)]
public string FullName { get { return FirstName + LastName; }}
}