カスタムシリアライザを使用して、C#オブジェクトをjson形式にシリアル化してREST APIで処理します。 APIは、次の形式でデータを受け取ることを期待:別のオブジェクト内でintの配列をシリアライズ
"product": {
"sku": "211554",
"extras": [{
"code": "cost",
"value": "3.99"
}, {
"code": "start_date",
"value": "2017-01-31T14:27:49.3032432+00:00"
}, {
"code": "end_date",
"value": "2017-02-01T14:27:49.3042537+00:00"
}, {
"code": "ids",
"value": [
"1",
"2",
"3",
"19"
]
}
]
}
シリアライザの一部がちょうどシリアライザが動作しているよう
"product": {
"sku": "211554",
"extras": [{
"code": "cost",
"value": "3.99"
}, {
"code": "start_date",
"value": "2017-01-31T14:56:05.4683698+00:00"
}, {
"code": "end_date",
"value": "2017-02-01T14:56:05.4693696+00:00"
}, {
"code": "ids",
"value": "System.Int32[]"
}
]
}
に
JsonConvert.SerializeObject(obj, _Settings);
しかし、結果から結果を返します複雑なネストされたオブジェクト型では問題ありませんが、上記の "ids"セクションのint配列など、単純なネストされた型では問題ありません。
シリアライザを単純なネストされた型で再帰的に動作させるには、何が必要なのでしょうか?私の知る限り、それはあなたのカスタム・シリアライザとは何の関係もないのです言うことができるように
public class CustomSerializer : ISerializer, IDeserializer
{
private JsonSerializerSettings _Settings;
public CustomSerializer()
{
ContentType = "application/json";
_Settings = new JsonSerializerSettings
{
MissingMemberHandling = MissingMemberHandling.Ignore,
NullValueHandling = NullValueHandling.Ignore,
DefaultValueHandling = DefaultValueHandling.Include
};
}
public string Serialize(object obj)
{
var result = JsonConvert.SerializeObject(obj, _Settings);
return result;
}
public T Deserialize<T>(IRestResponse response)
{
if (response == null) return default(T);
if (response.Content.StartsWith("{\"messages\":{")) return default(T);
return response.Content == "[]" ? default(T) : JsonConvert.DeserializeObject<T>(response.Content, _Settings);
}
...
}
あなたの使用している*カスタムシリアライザ*から問題が発生していると思われます。 –
JSONの例が無効で、 'obj'がどのように見えるのかわかりません。 – Equalsk
私はserisaliseが値ではなくタイプを取得しているどこかにToString()を持っていると思っています。 – AntDC