小编Jas*_*son的帖子

覆盖自定义JSON.net合约解析程序中的属性值

我正在尝试实现一个自定义的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)

c# json json.net

6
推荐指数
1
解决办法
2942
查看次数

Google将地理编码API V3映射为不返回javascript函数的结果

我正在尝试使用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)

javascript jquery google-maps geocoding google-geocoder

5
推荐指数
1
解决办法
3万
查看次数

C#4.0 MemoryCache - 如何在对依赖项进行更改时逐出相关的缓存条目

我试图在对其依赖的其他条目进行更改时从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)

.net c# caching c#-4.0 memorycache

5
推荐指数
1
解决办法
5517
查看次数

Hangfire仪表板返回404

当我尝试在域/ 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工作的想法了.

c# asp.net hangfire

5
推荐指数
2
解决办法
5089
查看次数

缩放更改时,google maps v3 zoom_changed事件不会触发

我有一个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)

javascript google-maps

4
推荐指数
1
解决办法
2万
查看次数

使用xslt将多个xml元素的值连接成单个元素

我的源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)

xml xslt xslt-1.0

3
推荐指数
1
解决办法
1万
查看次数

使用异步方法的结果

我有一个简单的异步方法与签名:

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委托分配给局部变量,第二个将结果直接分配给变量.

这些结果是否相同?两种方法都有任何优势吗?有一个更好的方法吗?

.net c# asynchronous task-parallel-library async-await

3
推荐指数
1
解决办法
154
查看次数

一段时间后过期单例实例

暂时搁置关于单例模式的相对优点和缺点的争论,考虑到单例通常被认为是在应用程序的生命周期内持续存在的实例,那么最好的方法是什么?生命有限的单身人士?

以下内容是否有任何问题:

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)

或者有没有更好的方法来解决这个问题?

c# singleton design-patterns

2
推荐指数
1
解决办法
1902
查看次数

首先在IEnumerable上排序或删除所有需要两者的?

当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)

c# performance coding-style

1
推荐指数
2
解决办法
735
查看次数

Visual Studio 2010 beta 2字体和颜色对话框

预览框中的字符是否意味着什么?

替代文字

已经绞尽脑汁,可能错过了明显的,或者我有点愚蠢,我应该已经知道了!

visual-studio-2010 visual-studio

0
推荐指数
1
解决办法
458
查看次数

检查ac#string中的每个字符是否都是相同的字符

从任何字符串开始,我需要确定该字符串是否包含仅一个或多个指定单个字符的实例.例如"£"会通过我的测试,"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#

0
推荐指数
1
解决办法
119
查看次数