小编Ant*_*ony的帖子

JavaScriptSerializer.Deserialize - 如何更改字段名称

简介:在使用JavaScriptSerializer.Deserialize时,如何将JSON数据中的字段名称映射到.Net对象的字段名称?

更长版本:我从服务器API(未在.Net中编码)向我发送以下JSON数据

{"user_id":1234, "detail_level":"low"}
Run Code Online (Sandbox Code Playgroud)

我有以下C#对象:

[Serializable]
public class DataObject
{
    [XmlElement("user_id")]
    public int UserId { get; set; }

    [XmlElement("detail_level")]
    public DetailLevel DetailLevel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

其中DetailLevel是一个枚举,其中"低"作为其中一个值.

此测试失败:

[TestMethod]
public void DataObjectSimpleParseTest()
{
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    DataObject dataObject = serializer.Deserialize<DataObject>(JsonData);

    Assert.IsNotNull(dataObject);
    Assert.AreEqual(DetailLevel.Low, dataObject.DetailLevel);
    Assert.AreEqual(1234, dataObject.UserId);
}
Run Code Online (Sandbox Code Playgroud)

最后两个断言失败,因为这些字段中没有数据.如果我将JSON数据更改为

 {"userid":1234, "detaillevel":"low"}
Run Code Online (Sandbox Code Playgroud)

然后它通过.但我不能改变服务器的行为,我希望客户端类在C#语言中具有良好命名的属性.我不能使用LINQ to JSON,因为我希望它在Silverlight之外工作.看起来XmlElement标签没有任何效果.我不知道我在哪里知道它们是相关的,它们可能不是.

你如何在JavaScriptSerializer中进行字段名称映射?它可以完成吗?

c# serialization parsing json javascriptserializer

72
推荐指数
6
解决办法
10万
查看次数

如何配置HttpClient在收到301 HTTP状态代码时不自动重定向?

考虑重定向的ASP.NET Web API服务

public class ThisController : ApiController
{
    /* more methods */

    public override HttpResponseMessage Post()
    {
        var result = new HttpResponseMessage(HttpStatusCode.MovedPermanently);
        // Post requests should be made to "ThatController" instead.
        string uri = Url.Route("That", null);
        result.Headers.Location = new Uri(uri, UriKind.Relative);
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

试图验证POST数据到"api/this"会将你重定向到"api/that",我有以下测试方法:

[TestMethod]
public void PostRedirects()
{
    using (var client = CreateHttpClient("application/json"))
    {
        var content = CreateContent(expected, "application/json");
        using (var responseMessage = client.PostAsync("api/this", content).Result)
        {
            Assert.AreEqual(HttpStatusCode.MovedPermanently, responseMessage.StatusCode);
            Assert.AreEqual(new Uri("https://api.example.com/api/that"), responseMessage.Headers.Location);
        }
    }
}

protected HttpClient …
Run Code Online (Sandbox Code Playgroud)

c#-4.0 asp.net-web-api dotnet-httpclient

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

MapMvcAttributeRoutes:在应用程序的启动前初始化阶段,无法调用此方法

在使用ASP MVC V5和属性路由的解决方案中,我在测试项目中进行了非常简单的测试.属性路由和MapMvcAttributeRoutes方法是ASP MVC 5的一部分.

[Test]
public void HasRoutesInTable()
{
    var routes = new RouteCollection();
    routes.MapMvcAttributeRoutes();
    Assert.That(routes.Count, Is.GreaterThan(0));
}
Run Code Online (Sandbox Code Playgroud)

这导致:

System.InvalidOperationException : 
This method cannot be called during the applications pre-start initialization phase.
Run Code Online (Sandbox Code Playgroud)

此错误消息的大多数答案涉及在web.config文件中配置成员资格提供程序.该项目既没有成员资格提供者也没有web.config文件,因此出于某种其他原因似乎发生了错误.如何将代码移出此"预启动"状态以便测试可以运行?

调用ApiController后的工作属性的等效代码HttpConfiguration.EnsureInitialized().

asp.net-mvc unit-testing attributerouting asp.net-mvc-5

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

SQL Server报告服务:如何在打开时停止触发报告

我们有一些SQL服务器报告服务报告.我当时没有写,但我必须照顾他们.

这些报告在浏览器中打开时触发,并且使用默认参数(搜索条件和限制为空白),它们检索大量数据,这很慢.客户端希望在用户输入参数并按"查看报告"之前不生成报告

不幸的是,我根本不了解SSRS - 如何在打开报告时停止报告?


有关如何在已部署的报告上执行此操作的详细信息(根据Rihan Meij的回答)如下:

点击报告,点击顶部的"属性".您可能需要稍等一下,因为慢速报告可能正在运行.然后单击左侧的"参数".

对于每个参数,请确保选中"提示用户",并且对于至少一个参数,不选中"已默认".再次单击左上角的"查看"(或返回文件夹并单击报告名称)以查看报告,并注意报告不会立即触发.

在报告构建器中,您可以通过"过滤器"菜单执行此操作.从至少一个过滤器中取消选择值,然后保存报告.

报告没有参数时,是否也可以停止报告加载?

sql-server reporting-services

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

IOC - 具有静态帮助方法的util类是否应该与IOC连接?

只是试着继续关注IOC原则.

Q1:静态方法 - 是否应将带有静态辅助方法的util类与IOC连接?

例如,如果我有一个带有许多静态方法的HttpUtils类,我应该尝试通过IOC将它传递给其他业务逻辑类吗?

关注这个问题可能是:

Q2:Singletons - 通过Logger.getInstance()类型调用,通常可以访问它的内容.您是否通常将其保留原样,并且不使用IOC将记录器注入需要它的业务类?

问题3:静态类 - 我还没有真正使用过这个概念,但如果你转向基于IOC的方法,那么你是否有任何指导方针可以解决这个问题.

提前致谢.

static ninject instance ioc-container inversion-of-control

27
推荐指数
2
解决办法
6715
查看次数

使用和不使用异步声明的lambdas之间是否存在差异

lambdas () => DoSomethingAsync()async () => await DoSomethingAsync()两者都输入时有区别Func<Task>吗?我们应该选择哪一个?何时?

这是一个简单的控制台应用程序

using System;
using System.Threading.Tasks;

namespace asyncDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var demo = new AsyncDemo();
            var task = demo.RunTheDemo();
            task.Wait();

            Console.ReadLine();
        }
    }

    public class AsyncDemo
    { 
        public async Task Runner(Func<Task> action)
        {
            Console.WriteLine(DateTime.Now.ToLongTimeString() + " Launching the action");
            await action();
        }

        private async Task DoSomethingAsync(string suffix)
        {
            await Task.Delay(2000);
            Console.WriteLine(DateTime.Now.ToLongTimeString() + " Done something, " + suffix);
        }

        public async …
Run Code Online (Sandbox Code Playgroud)

c# lambda asynchronous async-await

27
推荐指数
1
解决办法
1232
查看次数

HttpUtility.HtmlEncode不编码所有内容

我正在使用C#和.Net 3.5中的桌面客户端程序与Web服务器进行交互.我正在使用Fiddler来查看Web浏览器发送的流量,并模拟它.可悲的是,这台服务器已经很老了,对于charsets和utf-8的概念有点困惑.大多数情况下它使用Latin-1.

当我在包含"特殊"字符的Web浏览器中输入数据时,如"Ωπℵ♣♥♥♉♉♋♌♌♎♏♐♑♓♓",fiddler告诉我它们从浏览器传送到服务器如下: "&#9800; &#9801; &#9802; &#9803; &#9804; &#9805; &#9806; &#9807; &#9808; &#9809; &#9810; &#9811; "

但对于我的客户端,HttpUtility.HtmlEncode不会转换这些字符,而是将它们保留为原样.我需要打电话将"♈"转换为♈ 等等?

html c# encoding utf-8

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

具有NewRelic监控功能的ServiceStack

有没有人有成功将事务报告到NewRelicServiceStack Api的示例代码?

这似乎并不是微不足道的 - 它不是开箱即用的,添加一个RequestFilter调用NewRelic.Api.Agent.NewRelic.SetTransactionName不会改变它.

服务器和应用程序似乎配置正确 - 同一IIS服务器上的其他应用程序(ASP WebForms和ASP MVC)正确报告.我们正在使用IIS 7.5.每个应用程序都在自己的应用程序池中,并NewRelic.AppName在web.config中有一个

asp.net web-services servicestack newrelic

15
推荐指数
3
解决办法
1129
查看次数

Linq中的分层数据 - 选项和性能

我有一些分层数据 - 每个条目都有一个id和一个(可空)父条目id.我想检索给定条目下树中的所有条目.这是在SQL Server 2005数据库中.我在C#3.5中使用LINQ to SQL查询它.

LINQ to SQL不直接支持公用表表达式.我的选择是使用几个LINQ查询在代码中汇编数据,或者在面向CTE的数据库上进行查看.

当数据量变大时,您认为哪个选项(或其他选项)会表现更好?Linq to SQL是否支持SQL Server 2008的HierarchyId类型

sql linq sql-server-2005 common-table-expression c#-3.0

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

如何在RouteCollectionRoute中找到正确的路线?

我正在测试ASP MVC路由.我在ASP MVC 5.1中遇到属性路由问题

当我有这样的控制器时:

public class FooController : Controller
{
    [Route("foo")]
    [HttpGet]
    public ActionResult Get()
    {
      .... 
    }

    [Route("foo")]
    [HttpPost]
    public ActionResult Post()
    {
      .... 
    }
}
Run Code Online (Sandbox Code Playgroud)

然后为了测试哪个路由匹配特定请求,我打电话routes.GetRouteData.我得到一个System.Web.Routing.RouteData包含路由以及应该说明哪个控制器和操作匹配的值.

问题是这个路由现在是RouteCollectionRoute的一个实例, 这个内部类是这两个动作的一组路由的包装器.控制器在RouteData.values,但行动不是.你可以得到这些包含的路线routeData.Values["MS_DirectRouteMatches"] as IList<RouteData>.

在给出的示例中,列表中将有两个路径,用于两个操作方法.我需要知道哪些包含的路由实际匹配,以便我可以读取匹配路由的操作方法名称.我该如何解决这条路线?

我有点不知所措的设计选择RouteCollectionRoute.路由时,您有一个路由集合,然后通过调用解析URL的路由GetRouteData.现在你有一条路线.但如果它是一个RouteCollectionRoute如此仍然是路线的集合和路线解决尚未结束.有一个RouteCollectionRoute获得了什么?路线解决现在是一个两步过程吗?还是一个递归过程?

我知道我正在浏览ASP MVC的内部,但这是唯一的方法,因为它真的没有考虑到这种可测试性.即使是暴露一些内部类或方法等简单的事情也会有很大帮助!

asp.net-mvc asp.net-mvc-routing attributerouting asp.net-mvc-5.1

11
推荐指数
1
解决办法
1312
查看次数