|
|
@ -1,6 +1,7 @@ |
|
|
|
using com.alibaba.openapi.client.policy; |
|
|
|
using com.alibaba.openapi.client.primitive; |
|
|
|
using com.alibaba.openapi.client.util; |
|
|
|
using Newtonsoft.Json; |
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.Globalization; |
|
|
@ -23,8 +24,9 @@ namespace com.alibaba.openapi.client.serialize |
|
|
|
|
|
|
|
public Dictionary<String, Object> serialize(Object serializer) |
|
|
|
{ |
|
|
|
Dictionary<String, Object> result = serializeNest(serializer); |
|
|
|
return result; |
|
|
|
//Dictionary<String, Object> result = serializeNest(serializer);
|
|
|
|
//return result;
|
|
|
|
return serializeParam(serializer); |
|
|
|
} |
|
|
|
|
|
|
|
private Dictionary<String, Object> serializeNest(Object serializer) |
|
|
@ -49,57 +51,78 @@ namespace com.alibaba.openapi.client.serialize |
|
|
|
String tempName = upperFirstCharacter + piName.Substring(1); |
|
|
|
if (!"ApiId".Equals(tempName)) |
|
|
|
{ |
|
|
|
MethodInfo mi = type.GetMethod("get" + tempName); |
|
|
|
object value = mi.Invoke(serializer, null); |
|
|
|
if (value != null) |
|
|
|
{ |
|
|
|
object trueValue = null; |
|
|
|
if (fieldType.IsAssignableFrom(typeof(bool?)) |
|
|
|
||fieldType.IsAssignableFrom(typeof(byte?)) |
|
|
|
||fieldType.IsAssignableFrom(typeof(char?)) |
|
|
|
||fieldType.IsAssignableFrom(typeof(double?)) |
|
|
|
||fieldType.IsAssignableFrom(typeof(float?)) |
|
|
|
||fieldType.IsAssignableFrom(typeof(int?)) |
|
|
|
||fieldType.IsAssignableFrom(typeof(long?))) |
|
|
|
{ |
|
|
|
trueValue = value; |
|
|
|
} |
|
|
|
else if (fieldType.IsAssignableFrom(typeof(String))) |
|
|
|
MethodInfo mi = type.GetMethod("get" + tempName); |
|
|
|
object value = mi.Invoke(serializer, null); |
|
|
|
if (value != null) |
|
|
|
{ |
|
|
|
if (value.GetType().IsAssignableFrom(typeof(DateTime))) |
|
|
|
object trueValue = null; |
|
|
|
if (fieldType.IsAssignableFrom(typeof(bool?)) |
|
|
|
|| fieldType.IsAssignableFrom(typeof(byte?)) |
|
|
|
|| fieldType.IsAssignableFrom(typeof(char?)) |
|
|
|
|| fieldType.IsAssignableFrom(typeof(double?)) |
|
|
|
|| fieldType.IsAssignableFrom(typeof(float?)) |
|
|
|
|| fieldType.IsAssignableFrom(typeof(int?)) |
|
|
|
|| fieldType.IsAssignableFrom(typeof(long?))) |
|
|
|
{ |
|
|
|
trueValue = value; |
|
|
|
} |
|
|
|
else if (fieldType.IsAssignableFrom(typeof(String))) |
|
|
|
{ |
|
|
|
if (value.GetType().IsAssignableFrom(typeof(DateTime))) |
|
|
|
{ |
|
|
|
DateTime dateTime = (DateTime)value; |
|
|
|
trueValue = DateUtil.formatForOcean(dateTime); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
trueValue = value; |
|
|
|
} |
|
|
|
} |
|
|
|
else if (fieldType.IsAssignableFrom(typeof(DateTime?))) |
|
|
|
{ |
|
|
|
DateTime dateTime = (DateTime)value; |
|
|
|
trueValue = DateUtil.formatForOcean(dateTime); |
|
|
|
trueValue = DateUtil.format(dateTime); |
|
|
|
} |
|
|
|
else if (fieldType.IsAssignableFrom(typeof(Byte[])) || fieldType.IsAssignableFrom(typeof(byte[]))) |
|
|
|
{ |
|
|
|
trueValue = Convert.ToBase64String((byte[])value); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
trueValue = value; |
|
|
|
DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(fieldType); |
|
|
|
MemoryStream stream = new MemoryStream(); |
|
|
|
dataContractJsonSerializer.WriteObject(stream, value); |
|
|
|
byte[] dataBytes = new byte[stream.Length]; |
|
|
|
stream.Position = 0; |
|
|
|
stream.Read(dataBytes, 0, (int)stream.Length); |
|
|
|
|
|
|
|
string dataString = Encoding.UTF8.GetString(dataBytes); |
|
|
|
trueValue = dataString; |
|
|
|
} |
|
|
|
result.Add(piName, trueValue); |
|
|
|
} |
|
|
|
else if (fieldType.IsAssignableFrom(typeof(DateTime?))) |
|
|
|
{ |
|
|
|
DateTime dateTime = (DateTime)value; |
|
|
|
trueValue = DateUtil.format(dateTime); |
|
|
|
} |
|
|
|
else if (fieldType.IsAssignableFrom(typeof(Byte[])) || fieldType.IsAssignableFrom(typeof(byte[]))) |
|
|
|
{ |
|
|
|
trueValue = Convert.ToBase64String((byte[])value); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(fieldType); |
|
|
|
MemoryStream stream = new MemoryStream(); |
|
|
|
dataContractJsonSerializer.WriteObject(stream, value); |
|
|
|
byte[] dataBytes = new byte[stream.Length]; |
|
|
|
stream.Position = 0; |
|
|
|
stream.Read(dataBytes, 0, (int)stream.Length); |
|
|
|
|
|
|
|
string dataString = Encoding.UTF8.GetString(dataBytes); |
|
|
|
trueValue = dataString; |
|
|
|
} |
|
|
|
result.Add(piName, trueValue); |
|
|
|
} |
|
|
|
} |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
private Dictionary<string, object> serializeParam(object param) |
|
|
|
{ |
|
|
|
Dictionary<string, object> result = new Dictionary<string, object>(); |
|
|
|
Type type = param.GetType(); |
|
|
|
var properties = type.GetProperties(); |
|
|
|
foreach (var property in properties) |
|
|
|
{ |
|
|
|
var value = property.GetValue(param); |
|
|
|
var valueType = value.GetType(); |
|
|
|
if (valueType.IsClass) |
|
|
|
{ |
|
|
|
result.Add(property.Name, JsonConvert.SerializeObject(value)); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
result.Add(property.Name, value); |
|
|
|
} |
|
|
|
} |
|
|
|
return result; |
|
|
|