我有一个使用Json.NET(newtonsoft)作为自定义序列化程序的工作应用程序.目前我在自定义的WebServiceHostFactory中添加了WebHttpBehavior的衍生物.请参阅本博客末尾的代码段,了解我是如何附加它的.
由于我在IIS中托管此服务,我想摆脱我的自定义托管代码,只需将自定义行为添加到我的web.config.该程序显示在这篇msdn文章中.
所以我试着这样做:
<behaviors>
<endpointBehaviors>
<behavior name="jsonRest">
<webHttp defaultOutgoingResponseFormat="Json" />
<NewtonsoftJsonBehavior/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add name="NewtonsoftJsonBehavior" type="Newtonsoft.Json.Extensions.NewtonsoftJsonBehavior, NewtonsoftJsonExtensions, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
Run Code Online (Sandbox Code Playgroud)
可悲的是,我无法做那项工作.当我这样做时,Visual Studio告诉我
元素'behavior'具有无效的子元素'NewtonsoftJsonBehavior'
在上面提到的msdn文章中,据说是这样的
要向元素添加配置功能,您需要编写和注册配置元素.有关此内容的更多信息,请参阅System.Configuration文档.
定义元素及其配置类型后,可以使用扩展名,如以下示例所示.
我有这种感觉,我所缺少的就是那个.以某种方式注册元素及其配置类型.可悲的是,我无法对System.Configuration做出正面或反面,它应该告诉我如何做到这一点.所以这基本上是我的问题:
如何编写和注册配置元素,如果这不是我的问题,那么问题是什么?
提前谢谢了!
我正在将一些属性反序列化为a Dictionary<string, object>
.
当我反序列化JSON一些,它填充Dictionary
与Int64
对象,而不是Int32
.我希望它能够选择Int32
作为默认值,知道我可以使用转换时会溢出的javascript数字.在这种情况下抛出异常是完全可以接受的.
有没有办法实现这一目标?我希望有一些很好的属性或一个方便的界面,可以实现并添加到JsonSerializer
.而且我担心我必须深入到Json.NET的深处.
基本上我想有一些方法来控制对象的已知类型,这样我就可以Int32
代替Int64
而DateTimes
不是代替Strings
.
我已经看到两个都被使用,所以我想,他们做同样的事情或不同的事情?如果是后者,有什么区别?
我试着通过浏览视觉工作室MVC 4(rc)web api模板来尝试回答它,但遗憾的是它使用了两者,所以我的困惑仍然存在.这是模板包含的内容:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试网络工作者,并且想知道他们如何处理难以置信的并行问题.因此,我实施了Connaway的生命游戏.(比做一个模糊或其他东西更有趣.但是在那种情况下问题会是相同的.)
目前,我有一个Web工作人员执行迭代并为UI线程发布新的ImageData以放置在我的画布中.很好地工作.
然而,我的实验并没有结束,因为我有几个CPU可用,并希望平行我的应用程序.
因此,首先,我将数据分成两部分,中间部分,然后让两个工人分别处理一半.问题当然是分裂.工人A需要来自工人B的一列像素,反之亦然.现在,我可以通过让我的UI线程将该列提供给工作人员来清楚地解决这个问题,但如果我的线程可以直接将它们传递给彼此,那会更好.
当进一步拆分时,每个工人只需要跟踪它的邻居工作者,UI线程只负责更新UI(应该是这样).
我的问题是,我看不出如何实现这种从工人到工人的沟通.我尝试通过初始化postMessage将邻居交给彼此,但这会复制我的工作人员,而不是放下参考文件,幸运的是,Chrome警告我不可能.
Uncaught Error: DATA_CLONE_ERR: DOM Exception 25
Run Code Online (Sandbox Code Playgroud)
最后我看到有一种叫做a的东西SharedWorker
.这是我应该研究的,还是有办法用Worker
它来解决我的问题?
考虑一个复杂的应用程序,其中您有自定义过滤逻辑和不同的加载模式; 隐藏时延迟加载,隐藏时不加载,但在显示时加载并在修改自定义过滤器时重新加载等.
mvc app的哪个部分应该负责加载,以及如何连接它?
考虑以下课程:
public class User
{
public virtual int Id {get;set;}
public virtual string Name {get;set;}
public virtual User Superior {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我的目标是使用newtonsofts json.net将其序列化为json,如下所示:
{
Id: 101,
Name: 'Mithon',
SuperiorId: 100,
SuperiorName: 'TheMan'
}
Run Code Online (Sandbox Code Playgroud)
我为什么要这样做?因为我想使用Json作为我的DTO而不生成动态对象的中间层.生成DTO应该按惯例动态完成,而不是明确地,imho.我知道有些人可能强烈不同意这一点,但讨论我的方法除了重点之外.我只想知道是否以及如何做到这一点.
挑战是使用JsonPropertyAttribute
高级属性只会产生一个属性作为输出,我需要两个属性.如果我使用了一个JsonObjectAttribute
我会得到一个嵌套属性,我会遇到顶级用户也被弄平的问题.
幸运的是,似乎json.net库中有足够的受保护和/或公共属性和方法,我可以扩展一些东西以获得所需的结果.接下来的问题是我应该从哪些类和方法开始,到达我想去的地方?将从DefaultContractResolver派生,并覆盖GetProperties方法是好地方,还是我应该寻找其他地方?
给定一个用于在值周围构建一些html的模板,我想传入一个字符串,而不是一个节点集.作为一个例子,我想连接一些值并将其传递给模板.我怎么能做到这一点呢?
<xsl:template match="text()" mode="kvp-print-single">
<tr>
<td colspan="3"><xsl:value-of select="."/></td>
</tr>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
...
<xsl:apply-templates select="concat=(haba/hiba:text(), ' - ', huba/baba:text())" mode="kvp-print-single"/>
Run Code Online (Sandbox Code Playgroud)
ErrorMsg:xml或样式表文件无效!
异常:System.Xml.Xsl.XsltException:表达式必须求值为节点集.