Davor habe ich IDataContractSurrogate zum Serialisieren meiner Daten verwendet, aber es ist nicht kompatibel mit CPL (portable class librairy), daher verwende ich Newtonsoft jetzt.Besetzungsart mit Newtonsoft.Json
Aber ich habe eine ObservableCollection Art werfen mit zur Liste:
myobj [ { id:1, name="test1", value="test_1"}, { id:2, name="test2", value="test_2"}]
zu myobj ["test1", "test2"],
Ist es möglich? Ich habe versucht, wie folgt aus:
public class ccrUser : DefaultContractResolver { // Newtonsoft.Json.Serialization.IContractResolver
private bool toSerialise;
public static readonly ccrUser Instance = new ccrUser(true);
/// <summary>Constructeur</summary>
/// <param name="pToSerialise">Indique le sens qui sera utlisé (les API ne donnent pas le même format en GET qu'elles attendent en POST).</param>
public ccrUser(bool pToSerialise) : base() { toSerialise = pToSerialise; }
protected override JsonContract CreateContract(Type objectType) {
var contract = base.CreateContract(objectType);
if ((toSerialise) && (objectType == typeof(ObservableCollection<tblGroup>))) {
//contract.Converter = new Newtonsoft.Json.Converters.CustomCreationConverter<string>();
return base.CreateArrayContract(objectType);
} else
return contract;
}
protected override List<MemberInfo> GetSerializableMembers(Type objectType) {
var defaultMembers = base.GetSerializableMembers(objectType);
if ((toSerialise) && (objectType == typeof(ObservableCollection<tblGroup>))) {
return defaultMembers;
} else
return defaultMembers;
}
protected override JsonConverter ResolveContractConverter(Type objectType) {
if (objectType == typeof(ObservableCollection<tblGroup>)) {
return null; // pretend converter is not specified
}
return base.ResolveContractConverter(objectType);
}
/// <summary>JSON value provider that always returns a static value</summary>
public class StaticValueProvider : IValueProvider {
private readonly object _staticValue;
public StaticValueProvider(object staticValue) { _staticValue = staticValue; }
public void SetValue(object target, object value) { throw new NotSupportedException(); }
public object GetValue(object target) { return _staticValue; }
}
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) {
JsonProperty property = base.CreateProperty(member, memberSerialization);
if ((toSerialise) && (property.PropertyType == typeof(ObservableCollection<tblGroup>))) {
}
return property;
}
}
kann aber die Lösung nicht finden.
Grüße
Warum nicht deserialisieren 'myobj' wie es ist, und dann etwas in Getter andere Eigenschaft zurückgeben, was Sie brauchen? Oder wenn das Problem entgegengesetzt ist (serialisieren), dann serialisieren Sie eine andere Eigenschaft (die Konvertierung eingibt) statt der ursprünglichen. – Sinatr
Wegen der Kollision des Namens. In der Serialisierung erfordert, dass "Gruppen" ist es ein Array von String und Deserialisierung erfordert, dass "Gruppen" ist es ein Array von Objekten. – david