我正在尝试实现一个自定义的JSON.net IContractResolver,它将用指定的字符串替换所有null属性值.我知道这个功能可以通过序列化类型成员的属性获得; 这是我们正在考虑的替代路线.
到目前为止我的解析器实现如下.StringValueProvider是一个IValueProvider的简单实现,不会影响问题,这是我无法弄清楚如何获取值,property因为我不知道提供的实例的这个方法,member所以我无法传递它作为参数GetValue()(在代码示例中标记为WHAT-GOES-HERE?).
有没有办法,我能得到什么,我从需要member或property?
public class NullSubstitutionPropertyValueResolver : DefaultContractResolver
{
private readonly string _substitutionValue;
public NullSubstitutionPropertyValueResolver(string substitutionValue)
{
_substitutionValue = substitutionValue;
}
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty result = base.CreateProperty(member, memberSerialization);
PropertyInfo property = member as PropertyInfo;
if (property == null)
{
return result;
}
// What do I use here to get the property value?
bool isNull = property.GetValue(WHAT-GOES-HERE?) == null;
if (isNull)
{ …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Google地理编码器API V3根据用户指定的地址在地图上绘制位置,代码如下.
当我直接提出请求时(例如http://maps.googleapis.com/maps/api/geocode/json?address=peterborough&sensor=false),我得到了预期的回复.但是,当我使用下面的代码发出相同的请求时,在getLatLong函数退出后,中间点变量始终是未定义的.
我做错了什么?
function loadFromSearch(address)
{
midpoint = getLatLong(address);
mapCentre = midpoint;
map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
...
}
function getLatLong(address)
{
var result;
var url = 'http://maps.googleapis.com/maps/api/geocode/json?address=' + encodeURIComponent(address) + '&sensor=false'
$.getJSON(url,
function (data){
if (data.status == "OK")
{
result = data.results[0].geometry.location;
}
});
return result;
}
Run Code Online (Sandbox Code Playgroud)
================================================== ================================
鉴于回复,我现在已将代码更新为以下内容.我仍然没有得到任何结果,在Firebug中设置断点结果= data.results [0] .geometry.location; 永远不会受到打击
function loadFromSearch(address)
{
midpoint = getLatLong(address, loadWithMidpoint);
}
function getLatLong(address, callback)
{
var result;
var url = 'http://maps.googleapis.com/maps/api/geocode/json?address=' + encodeURIComponent(address) + …Run Code Online (Sandbox Code Playgroud) 我试图在对其依赖的其他条目进行更改时从MemoryCache中逐出条目.这是通过为依赖键的依赖项创建缓存条目更改监视器来设置的:
public bool AddToCache(string key, object dataItem,
DateTimeOffset absoluteExpiration, IEnumerable<string> dependencyKeys)
{
bool result = false;
if (!string.IsNullOrWhiteSpace(key) && dataItem != null)
{
CacheItemPolicy policy = new CacheItemPolicy {
AbsoluteExpiration = absoluteExpiration
};
if (masterKeys != null && masterKeys.Any())
{
policy.ChangeMonitors.Add(
this.provider.Cache.
CreateCacheEntryChangeMonitor(dependencyKeys));
foreach (ChangeMonitor monitor in policy.ChangeMonitors)
{
monitor.NotifyOnChanged(this.OnDependencyChanged);
}
}
result = this.provider.Cache.Add(key, dataItem, policy);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
该OnChangedCallBack方法是这样的:
private void OnDependencyChanged(object state)
{
// what do I do here as "state" is always null? …Run Code Online (Sandbox Code Playgroud) 当我尝试在域/ hangfire /上访问本地IIS上的hangfire控制台时,我收到了404响应.这是针对.Net 4.5.1的webforms项目,Hangfire是1.5.3版.我的startup和authorisationoverride类如下:
[assembly: OwinStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
GlobalConfiguration.Configuration.UseSqlServerStorage("MyConnString");
DashboardOptions opts = new DashboardOptions
{
AuthorizationFilters = new[] { new AuthorisationOverride() }
};
app.UseHangfireServer();
app.UseHangfireDashboard("/hangfire", opts);
}
}
}
public class AuthorisationOverride : Hangfire.Dashboard.IAuthorizationFilter
{
public bool Authorize(IDictionary<string, object> owinEnvironment)
{
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
工作正在成功运行,但我已经没有让Dashboard工作的想法了.
我有一个v3谷歌地图正在按照我的预期加载,标记符合我的意图.但是,当我更改缩放时,我添加的zoom_changed事件似乎不会触发.有人能够阐明原因吗?我的代码如下.
function map_initialise() {
var mapCentre = new google.maps.LatLng(53.75, -1.50);
var mapOptions = {
zoom: 6,
center: mapCentre,
mapTypeId: google.maps.MapTypeId.HYBRID
}
var map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);
var latlong1 = new google.maps.LatLng(52.456550,1.680182);
var windowtext1 = 'Some text';
var popup1 = new google.maps.InfoWindow({
content: windowtext1
});
var marker1 = new google.maps.Marker({
position: latlong1,
title: "Some text"
});
google.maps.event.addListener(marker1, 'click', function() {
popup1.open(map,marker1);
});
marker1.setMap(map);
}
google.maps.event.addDomListener(window, 'load', map_initialise);
google.maps.event.addListener(map, 'zoom_changed', function() {
setTimeout(reCentre, 3000);
});
function reCentre() {
var newcentre = …Run Code Online (Sandbox Code Playgroud) 我的源xml文件包含以下形式的元素:
<field name="Address1">Address1Value</field>
<field name="Address2">Address2Value</field>
<field name="Address3">Address3Value</field>
Run Code Online (Sandbox Code Playgroud)
我需要将它们合并为一个元素,因此:
<field name="Address">Address1Value\r\nAddress2Value\r\nAddress3Value</field>
Run Code Online (Sandbox Code Playgroud)
我知道如何获取Address1元素的值(如下所示),我只是无法弄清楚如何用其他两个来增加它.我怎样才能做到这一点?
<xsl:template match="field[@name = 'Address1']">
<field>
<xsl:attribute name="name">Address</xsl:attribute>
<xsl:value-of select="concat(., 'how-do-I-get-the-values-of-Address2-and-Address-here3?')"/>
</field>
</xsl:template>
Run Code Online (Sandbox Code Playgroud) 我有一个简单的异步方法与签名:
public async Task<bool> AllowAccessAsync(string authenticatedUserToken)
Run Code Online (Sandbox Code Playgroud)
调用此方法时,在将结果分配给局部变量时,我似乎有两个选项:
bool response = null;
// option 1
await this.transportService.AllowAccessAsync(authenticatedUserToken).ContinueWith(task => response = task.Result);
// option 2
response = await this.transportService.AllowAccessAsync(authenticatedUserToken);
Run Code Online (Sandbox Code Playgroud)
第一个使用continuation委托分配给局部变量,第二个将结果直接分配给变量.
这些结果是否相同?两种方法都有任何优势吗?有一个更好的方法吗?
暂时搁置关于单例模式的相对优点和缺点的争论,考虑到单例通常被认为是在应用程序的生命周期内持续存在的实例,那么最好的方法是什么?生命有限的单身人士?
以下内容是否有任何问题:
public class CategoryHandler
{
private static DateTime m_expires;
public bool HasExpired
{
get return DateTime.Now > m_expires;
}
private CategoryHandler()
{
m_expires = DateTime.Now.AddMinutes(60);
}
public static CategoryHandler Instance()
{
if(HasExpired)
{
//Dispose and reconstruct
}
else
{
//Use existing instance
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者有没有更好的方法来解决这个问题?
当IEnumerable需要进行排序和要删除的元素时,是否有以特定顺序执行阶段的优点/缺点?我的表现测试似乎表明它无关紧要.
我所说的简化(有点人为)的例子如下所示:
public IEnumerable<DataItem> GetDataItems(int maximum, IComparer<DataItem> sortOrder)
{
IEnumerable<DataItem> result = this.GetDataItems();
result.Sort(sortOrder);
result.RemoveAll(item => !item.Display);
result = result.Take(maximum);
return result;
}
Run Code Online (Sandbox Code Playgroud) 预览框中的字符是否意味着什么?

已经绞尽脑汁,可能错过了明显的,或者我有点愚蠢,我应该已经知道了!
从任何字符串开始,我需要确定该字符串是否包含仅一个或多个指定单个字符的实例.例如"£"会通过我的测试,"wertf"会失败.我采取的方法如下:
string source = "any string";
char[] candidate = source.ToCharArray();
char validCharacter = '£';
if (candidate.Length > 0)
{
// (code removed) if candidate length = 1 then just test candidate[0] against validCharacter
bool isValid = true;
int index = 0;
while (index < candidate.Length - 1)
{
if (candidate [index] != validCharacter )
{
isValid = false;
break;
}
index++;
}
if (isValid)
{
// success, do what needs doing
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所料,这是有效的,但我不禁觉得我可能会错过这里的一招.是否有一种更好,更简洁的方法,这样做不会牺牲上述的清晰度?
c# ×7
.net ×2
google-maps ×2
javascript ×2
asp.net ×1
async-await ×1
asynchronous ×1
c#-4.0 ×1
caching ×1
coding-style ×1
geocoding ×1
hangfire ×1
jquery ×1
json ×1
json.net ×1
memorycache ×1
performance ×1
singleton ×1
xml ×1
xslt ×1
xslt-1.0 ×1