You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
4.7 KiB
141 lines
4.7 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using Jd.Api.Util;
|
|
|
|
namespace Jd.Api
|
|
{
|
|
/// <summary>
|
|
/// 符合Jd习惯的纯字符串字典结构。
|
|
/// </summary>
|
|
public class JdDictionary : Dictionary<string, string>
|
|
{
|
|
public JdDictionary() { }
|
|
|
|
public JdDictionary(IDictionary<string, string> dictionary)
|
|
: base(dictionary)
|
|
{ }
|
|
|
|
/// <summary>
|
|
/// 添加一个新的键值对。空键或者空值的键值对将会被忽略。
|
|
/// </summary>
|
|
/// <param name="key">键名称</param>
|
|
/// <param name="value">键对应的值,目前支持:string, int, long, double, bool, DateTime类型</param>
|
|
public void Add(string key, object value)
|
|
{
|
|
string strValue;
|
|
|
|
if (value == null)
|
|
{
|
|
strValue = null;
|
|
}
|
|
else if (value is string)
|
|
{
|
|
strValue = (string)value;
|
|
}
|
|
else if (value is DateTime)
|
|
{
|
|
strValue = JdUtils.FormatDateTime((DateTime)value);
|
|
}
|
|
else if (value is Boolean)
|
|
{
|
|
strValue = ((Boolean)value).ToString().ToLower();
|
|
}
|
|
else if (value is Nullable<DateTime>)
|
|
{
|
|
Nullable<DateTime> dateTime = value as Nullable<DateTime>;
|
|
strValue = dateTime.HasValue ? JdUtils.FormatDateTime(dateTime.Value) : null;
|
|
}
|
|
else if (value is Nullable<Int16>)
|
|
{
|
|
Nullable<Int16> v = value as Nullable<Int16>;
|
|
strValue = v.HasValue ? v.Value.ToString() : null;
|
|
}
|
|
else if (value is Nullable<Int32>)
|
|
{
|
|
Nullable<Int32> v = value as Nullable<Int32>;
|
|
strValue = v.HasValue ? v.Value.ToString() : null;
|
|
}
|
|
else if (value is Nullable<Int64>)
|
|
{
|
|
Nullable<Int64> v = value as Nullable<Int64>;
|
|
strValue = v.HasValue ? v.Value.ToString() : null;
|
|
}
|
|
else if (value is Nullable<Single>)
|
|
{
|
|
Nullable<Single> v = value as Nullable<Single>;
|
|
strValue = v.HasValue ? v.Value.ToString() : null;
|
|
}
|
|
else if (value is Nullable<Decimal>)
|
|
{
|
|
Nullable<Decimal> v = value as Nullable<Decimal>;
|
|
strValue = v.HasValue ? v.Value.ToString() : null;
|
|
}
|
|
else if (value is Nullable<Double>)
|
|
{
|
|
Nullable<Double> v = value as Nullable<Double>;
|
|
strValue = v.HasValue ? v.Value.ToString() : null;
|
|
}
|
|
else if (value is Nullable<Boolean>)
|
|
{
|
|
Nullable<Boolean> v = value as Nullable<Boolean>;
|
|
strValue = v.HasValue ? v.Value.ToString().ToLower() : null;
|
|
}
|
|
else if (value is List<Jd.Api.Request.Field>)
|
|
{
|
|
List<Jd.Api.Request.Field> v = value as List<Jd.Api.Request.Field>;
|
|
strValue = ParseFieldList(v);
|
|
}
|
|
else if (value is Byte[])
|
|
{
|
|
strValue = Convert.ToBase64String((Byte[])value);
|
|
}
|
|
else
|
|
{
|
|
strValue = value.ToString();
|
|
}
|
|
|
|
this.Add(key, strValue);
|
|
}
|
|
|
|
public new void AddNotNull(string key, string value)
|
|
{
|
|
if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
|
|
{
|
|
base.Add(key, value);
|
|
}
|
|
}
|
|
|
|
public new void Add(string key, string value)
|
|
{
|
|
if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
|
|
{
|
|
base.Add(key, value);
|
|
}
|
|
}
|
|
|
|
private String ParseFieldList(List<Jd.Api.Request.Field> list)
|
|
{
|
|
list.Sort((Jd.Api.Request.Field a, Jd.Api.Request.Field b) => { return String.Compare(a.Key, b.Key); });
|
|
IEnumerator<Jd.Api.Request.Field> enumerator = list.GetEnumerator();
|
|
StringBuilder query = new StringBuilder("[");
|
|
Boolean first = true;
|
|
while (enumerator.MoveNext())
|
|
{
|
|
string key = enumerator.Current.Key;
|
|
string value = enumerator.Current.Value;
|
|
if (!string.IsNullOrEmpty(key))
|
|
{
|
|
if (!first)
|
|
query.Append(",");
|
|
|
|
query.AppendFormat("{{\"{0}\":\"{1}\"}}", key, value);
|
|
first = false;
|
|
}
|
|
}
|
|
query.Append("]");
|
|
return query.ToString();
|
|
|
|
}
|
|
}
|
|
}
|