JsonContainerContract
Contract details for a Type used by the JsonSerializer.
using Newtonsoft.Json.Utilities;
using System;
namespace Newtonsoft.Json.Serialization
{
public class JsonContainerContract : JsonContract
{
private JsonContract _itemContract;
private JsonContract _finalItemContract;
internal JsonContract ItemContract {
get {
return _itemContract;
}
set {
_itemContract = value;
if (_itemContract != null)
_finalItemContract = (_itemContract.UnderlyingType.IsSealed() ? _itemContract : null);
else
_finalItemContract = null;
}
}
internal JsonContract FinalItemContract => _finalItemContract;
public JsonConverter ItemConverter { get; set; }
public bool? ItemIsReference { get; set; }
public ReferenceLoopHandling? ItemReferenceLoopHandling { get; set; }
public TypeNameHandling? ItemTypeNameHandling { get; set; }
internal JsonContainerContract(Type underlyingType)
: base(underlyingType)
{
JsonContainerAttribute cachedAttribute = JsonTypeReflector.GetCachedAttribute<JsonContainerAttribute>(underlyingType);
if (cachedAttribute != null) {
if (cachedAttribute.ItemConverterType != (Type)null)
ItemConverter = JsonTypeReflector.CreateJsonConverterInstance(cachedAttribute.ItemConverterType, cachedAttribute.ItemConverterParameters);
ItemIsReference = cachedAttribute._itemIsReference;
ItemReferenceLoopHandling = cachedAttribute._itemReferenceLoopHandling;
ItemTypeNameHandling = cachedAttribute._itemTypeNameHandling;
}
}
}
}