Browse Source

重写适合.net的参数序列化方法

qianyi
shanji 3 years ago
parent
commit
80f84f6bd4
  1. 4
      BBWY.1688SDK/BBWY.1688SDK.csproj
  2. 200
      BBWY.1688SDK/example/param/apiexample/ExampleFamily.cs
  3. 104
      BBWY.1688SDK/example/param/apiexample/ExampleFamilyPostParam.cs
  4. 136
      BBWY.1688SDK/example/param/apiexample/ExampleHouse.cs
  5. 2
      BBWY.1688SDK/serialize/Json2Deserializer.cs
  6. 107
      BBWY.1688SDK/serialize/Param2RequestSerializer.cs

4
BBWY.1688SDK/BBWY.1688SDK.csproj

@ -5,4 +5,8 @@
<RootNamespace>BBWY._1688SDK</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>
</Project>

200
BBWY.1688SDK/example/param/apiexample/ExampleFamily.cs

@ -9,124 +9,136 @@ using System.Text;
namespace com.alibaba.china.openapi.client.example.param.apiexample
{
[DataContract(Namespace = "com.alibaba.openapi.client")]
[DataContract(Namespace = "com.alibaba.openapi.client")]
public class ExampleFamily
{
[DataMember(Order = 1)]
private int? familyNumber;
[DataMember(Order = 1)]
private int? familyNumber;
/**
* @return
*/
public int? getFamilyNumber() {
return familyNumber;
}
/**
* *
* <pre></pre>
*
*/
public void setFamilyNumber(int familyNumber) {
this.familyNumber = familyNumber;
}
public int? getFamilyNumber()
{
return familyNumber;
}
/**
* *
* <pre></pre>
*
*/
public void setFamilyNumber(int familyNumber)
{
this.familyNumber = familyNumber;
}
[DataMember(Order = 2)]
private ExamplePerson father;
private ExamplePerson father;
/**
* @return
*/
public ExamplePerson getFather() {
return father;
}
/**
* *
* <pre></pre>
*
*/
public void setFather(ExamplePerson father) {
this.father = father;
}
public ExamplePerson getFather()
{
return father;
}
/**
* *
* <pre></pre>
*
*/
public void setFather(ExamplePerson father)
{
this.father = father;
}
[DataMember(Order = 3)]
private ExamplePerson mother;
private ExamplePerson mother;
/**
* @return
*/
public ExamplePerson getMother() {
return mother;
}
/**
* *
* <pre></pre>
*
*/
public void setMother(ExamplePerson mother) {
this.mother = mother;
}
public ExamplePerson getMother()
{
return mother;
}
/**
* *
* <pre></pre>
*
*/
public void setMother(ExamplePerson mother)
{
this.mother = mother;
}
[DataMember(Order = 4)]
private ExamplePerson[] children;
private ExamplePerson[] children;
/**
* @return
*/
public ExamplePerson[] getChildren() {
return children;
}
/**
* *
* <pre></pre>
*
*/
public void setChildren(ExamplePerson[] children) {
this.children = children;
}
public ExamplePerson[] getChildren()
{
return children;
}
/**
* *
* <pre></pre>
*
*/
public void setChildren(ExamplePerson[] children)
{
this.children = children;
}
[DataMember(Order = 5)]
private ExampleCar[] ownedCars;
private ExampleCar[] ownedCars;
/**
* @return
*/
public ExampleCar[] getOwnedCars() {
return ownedCars;
}
/**
* *
* <pre></pre>
*
*/
public void setOwnedCars(ExampleCar[] ownedCars) {
this.ownedCars = ownedCars;
}
public ExampleCar[] getOwnedCars()
{
return ownedCars;
}
/**
* *
* <pre></pre>
*
*/
public void setOwnedCars(ExampleCar[] ownedCars)
{
this.ownedCars = ownedCars;
}
[DataMember(Order = 6)]
private ExampleHouse myHouse;
private ExampleHouse myHouse;
/**
* @return
*/
public ExampleHouse getMyHouse() {
return myHouse;
}
/**
* *
* <pre></pre>
*
*/
public void setMyHouse(ExampleHouse myHouse) {
this.myHouse = myHouse;
}
}
public ExampleHouse getMyHouse()
{
return myHouse;
}
/**
* *
* <pre></pre>
*
*/
public void setMyHouse(ExampleHouse myHouse)
{
this.myHouse = myHouse;
}
}
}

104
BBWY.1688SDK/example/param/apiexample/ExampleFamilyPostParam.cs

@ -9,67 +9,73 @@ using System.Text;
namespace com.alibaba.china.openapi.client.example.param.apiexample
{
[DataContract(Namespace = "com.alibaba.openapi.client")]
[DataContract(Namespace = "com.alibaba.openapi.client")]
public class ExampleFamilyPostParam
{
[DataMember(Order = 1)]
private ExampleFamily family;
[DataMember(Order = 1)]
private ExampleFamily family;
/**
* @return Family对象信息
*/
public ExampleFamily getFamily() {
return family;
}
/**
* Family对象信息 *
* <pre></pre>
*
*/
public void setFamily(ExampleFamily family) {
this.family = family;
}
public ExampleFamily getFamily()
{
return family;
}
/**
* Family对象信息 *
* <pre></pre>
*
*/
public void setFamily(ExampleFamily family)
{
this.family = family;
}
[DataMember(Order = 2)]
private string comments;
private string comments;
/**
* @return
*/
public string getComments() {
return comments;
}
/**
* *
* <pre></pre>
*
*/
public void setComments(string comments) {
this.comments = comments;
}
public string getComments()
{
return comments;
}
/**
* *
* <pre></pre>
*
*/
public void setComments(string comments)
{
this.comments = comments;
}
[DataMember(Order = 3)]
private byte[] houseImg;
private byte[] houseImg;
/**
* @return
*/
public byte[] getHouseImg() {
return houseImg;
}
/**
* *
* <pre></pre>
*
*/
public void setHouseImg(byte[] houseImg) {
this.houseImg = houseImg;
}
}
public byte[] getHouseImg()
{
return houseImg;
}
/**
* *
* <pre></pre>
*
*/
public void setHouseImg(byte[] houseImg)
{
this.houseImg = houseImg;
}
}
}

136
BBWY.1688SDK/example/param/apiexample/ExampleHouse.cs

@ -9,86 +9,94 @@ using System.Text;
namespace com.alibaba.china.openapi.client.example.param.apiexample
{
[DataContract(Namespace = "com.alibaba.openapi.client")]
[DataContract(Namespace = "com.alibaba.openapi.client")]
public class ExampleHouse
{
[DataMember(Order = 1)]
private string location;
[DataMember(Order = 1)]
private string location;
/**
* @return
*/
public string getLocation() {
return location;
}
/**
* *
* <pre></pre>
*
*/
public void setLocation(string location) {
this.location = location;
}
public string getLocation()
{
return location;
}
/**
* *
* <pre></pre>
*
*/
public void setLocation(string location)
{
this.location = location;
}
[DataMember(Order = 2)]
private int? areaSize;
private int? areaSize;
/**
* @return
*/
public int? getAreaSize() {
return areaSize;
}
/**
* *
* <pre></pre>
*
*/
public void setAreaSize(int areaSize) {
this.areaSize = areaSize;
}
public int? getAreaSize()
{
return areaSize;
}
/**
* *
* <pre></pre>
*
*/
public void setAreaSize(int areaSize)
{
this.areaSize = areaSize;
}
[DataMember(Order = 3)]
private bool? rent;
private bool? rent;
/**
* @return
*/
public bool? getRent() {
return rent;
}
/**
* *
* <pre></pre>
*
*/
public void setRent(bool rent) {
this.rent = rent;
}
public bool? getRent()
{
return rent;
}
/**
* *
* <pre></pre>
*
*/
public void setRent(bool rent)
{
this.rent = rent;
}
[DataMember(Order = 4)]
private int? rooms;
private int? rooms;
/**
* @return
*/
public int? getRooms() {
return rooms;
}
/**
* *
* <pre></pre>
*
*/
public void setRooms(int rooms) {
this.rooms = rooms;
}
}
public int? getRooms()
{
return rooms;
}
/**
* *
* <pre></pre>
*
*/
public void setRooms(int rooms)
{
this.rooms = rooms;
}
}
}

2
BBWY.1688SDK/serialize/Json2Deserializer.cs

@ -38,7 +38,7 @@ namespace com.alibaba.openapi.client.serialize
{
istream.Position = 0;
//istream.Position = 0;
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(ErrorExceptionDesc));
object resultObj = jsonSerializer.ReadObject(istream);
ErrorExceptionDesc result = (ErrorExceptionDesc)resultObj;

107
BBWY.1688SDK/serialize/Param2RequestSerializer.cs

@ -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;

Loading…
Cancel
Save