internal static IDictionary<string, RouteMember> GetQueryProperties(Type requestType)
{
var result = new Dictionary<string, RouteMember>(PclExport.Instance.InvariantComparerIgnoreCase);
var hasDataContract = requestType.HasAttribute<DataContractAttribute>();
foreach (var propertyInfo in requestType.GetPublicProperties())
{
var propertyName = propertyInfo.Name;
if (!propertyInfo.CanRead) continue;
if (hasDataContract)
{
if (!propertyInfo.HasAttribute<DataMemberAttribute>()) continue;
var dataMember = propertyInfo.FirstAttribute<DataMemberAttribute>();
if (!IsNullOrEmpty(dataMember.Name))
{
propertyName = dataMember.Name;
}
}
result[propertyName.ToCamelCase()] = new PropertyRouteMember(propertyInfo)
{
IgnoreInQueryString = propertyInfo.FirstAttribute<IgnoreDataMemberAttribute>() != null, //but allow in PathInfo
};
}
if (JsConfig.IncludePublicFields)
{
foreach (var fieldInfo in requestType.GetPublicFields())
{
var fieldName = fieldInfo.Name;
result[fieldName.ToCamelCase()] = new FieldRouteMember(fieldInfo)
{
IgnoreInQueryString = fieldInfo.FirstAttribute<IgnoreDataMemberAttribute>() != null, //but allow in PathInfo
};
}
}
return result;
}