我的git存储库中有许多模板文件,它们以不同的速率变化.然后将它们用于生成HTML页面.如果有人报告问题,我希望他们能够告诉我哪个版本的模板文件存在问题.目前,我在更改文件时手动输入日期.或者,我试着.我大部分时间都忘记了.
至少在理论上,我应该能够使用git smudge和clean过滤器来修复文件并自动插入上次更新的日期.这会很棒.
除了我在一台机器上开发,当我准备好时,我推/拉到另一台机器.
如何在另一台机器上显示污迹和清洁过滤器?我不想在路径中添加奇怪的脚本; 这只是这个存储库所需要的,所以我想让它完全自包含.在线的一切都说"将此过滤器定义添加到〜/ .gitconfig,然后将这些脚本添加到您的路径,然后设置存储库.gitattributes文件".我想要它,这样如果我去一台新计算机并克隆存储库,所有的清理和涂抹都会自动配置.
有没有人这样做过?
我正在尝试编写一个自定义的JavascriptConverter,用于我正在编写的WebService.我必须编写一个自定义转换器,因为Microsoft.JScript.JSObject不支持IDictionary,所以它被视为一个数组.我有这部分工作正常.但是,因为Microsoft.JScript.ArrayObject是Microsoft.JScript.JSObject的子类,所以它也尝试使用相同的方法转换它.如何返回将被序列化为JSON数组的内容?我必须返回一个IDictionary,它将成为一个JSON对象.有什么我想念的吗?
具体来说,我如何从Serialize返回一些被序列化为Array的东西,而不是Object.
谢谢!
编辑:
我想我需要更具体一点.
Microsoft.JScript.JSObject实现IEnumerable,但不实现IDictionary.Microsoft.JScript.ArrayObject是Microsoft.JScript.JSObject的子类.如果我在JScript.NET中创建一个.asmx,当我尝试返回一个JSObject时,它会被序列化为一个数组(因为它实现了IEnumerable,但不是IDictionary),这意味着只有对象中的属性名被序列化.当然,如果我交回一个ArrayObject,它可以正常工作,并将其序列化为一个数组.
所以,我实现了一个JavascriptConverter的子类,它说它的SupportedType是Microsoft.JScript.JSObject.现在,JSObjects被正确序列化了.但是,因为ArrayObject是JSObject的子类,所以JavascriptSerializer不再负责序列化ArrayObjects本身,而是将它交给JSObject序列化程序.问题是,我的自定义序列化程序如何返回JavaScriptSerializer将作为数组正确处理的内容,而不是作为对象 - Serialize被强制返回IDictionary,并且被序列化为对象,而不是数组.
这个问题更有意义吗?
顺便说一句:我已经看过WCF和C#了,但是DataContractJsonSerializer输出完全无用,除非你只使用WCF客户端访问它; 我打算用jQuery检索它.
回答:
我终于明白了bdukes试图说的是什么,而且它有效!返回字典时,你需要告诉它它是一个数组(虽然这不适用于顶级数组).这是Serialize我要写的功能:
public override IDictionary<string, object> Serialize (object obj, JavaScriptSerializer serializer) {
JSObject jsobj = obj as JSObject;
Dictionary<string, object> netdict = new Dictionary<string, object>();
if (jsobj != null) {
foreach (string prop in jsobj) {
object value = jsobj.GetField(prop, BindingFlags.Default).GetValue(jsobj);
switch (value.GetType().FullName) {
case "Microsoft.JScript.ArrayObject":
object[] arr_obj = ((IEnumerable)(Microsoft.JScript.ArrayObject)value).Cast<object>().ToArray<object>();
netdict.Add(prop, arr_obj);
break;
default:
netdict.Add(prop, value);
break;
}
}
}
return netdict;
}
Run Code Online (Sandbox Code Playgroud)