的問題可能是,德塔會嘗試分配JSON的JArray
您Hashset<int>
如果您使用的是它針對JsonMEdiaTypeFormatter和你內在三角洲代碼(這意味着你可以修改它),你必須做這樣的事情(這是粗糙的,但工程):
裏面的Delta<T>
bool TrySetPropertyValue(string name, object value)
,它返回false:
if (value != null && !cacheHit.Property.PropertyType.IsPrimitive && !isGuid && !cacheHit.Property.PropertyType.IsAssignableFrom(value.GetType()))
{
return false;
}
更改爲:
var valueType = value.GetType();
var propertyType = cacheHit.Property.PropertyType;
if (value != null && !propertyType.IsPrimitive && !propertyType.IsAssignableFrom(valueType))
{
var array = value as JArray;
if (array == null)
return false;
var underlyingType = propertyType.GetGenericArguments().FirstOrDefault() ??
propertyType.GetElementType();
if (underlyingType == typeof(string))
{
var a = array.ToObject<IEnumerable<string>>();
value = Activator.CreateInstance(propertyType, a);
}
else if (underlyingType == typeof(int))
{
var a = array.ToObject<IEnumerable<int>>();
value = Activator.CreateInstance(propertyType, a);
}
else
return false;
}
這隻會與int
或string
收集工作,但希望你輕推到一個很好的方向。
例如,現在你的模型有:
public class Team {
public HashSet<string> PlayerIds { get; set; }
public List<int> CoachIds { get; set; }
}
而且你能夠成功地更新它們。
謝謝你,你讓我很快樂(再次)!爲了使它工作,我不得不大幅改變你的代碼。 – aknuds1
謝謝,好吧,我沒有直接在這裏輸入:) –