小编use*_*830的帖子

我们如何使用CsvHelper库编写像sep =这样的分隔符?

我们使用CsvHelper库从我们的应用程序中导出一些信息,我们的客户通常使用Excel来查看结果

在此输入图像描述 (正确打开数据的样本)

一切都运行良好,直到我在德国(奥地利)设置格式设置的另一台机器上测试我生成的文件,我发现excel不再正确解析它是可以理解的,因为,这种格式有不同的含义. 在此输入图像描述

添加sep =,在第一行似乎解决了问题,但我无法在CsvHelper文件中找到我们如何实现这一目标.所以问题是

我们如何使用CsvHelper库编写像sep =或任何具有类似效果的分隔符?

c# csvhelper

9
推荐指数
3
解决办法
3828
查看次数

即使使用默认设置,Json.NET也会将枚举序列化为字符串

我正在使用Json.NET 7.0.1.

文件说,

Enum [序列化为] Integer(可以是StringEnumConverter的枚举值名称)

在我的Global.asax.cs中,我指定默认设置如下:

JsonConvert.DefaultSettings = (() =>
{
    var settings = new JsonSerializerSettings();
    settings.Converters.Add(new StringEnumConverter());
    return settings;
});
Run Code Online (Sandbox Code Playgroud)

但是,在某些情况下,我希望Enums将其序列化为整数,例如,当我构建要存储在数据库中的JSON时.

我是这样做的:

public class JsonSerializedType<T> : IUserType where T : class
{
    private static readonly JsonSerializerSettings serializerSettings = new JsonSerializerSettings();

    public void NullSafeSet(IDbCommand cmd, object value, int index)
    {
        cmd.Parameters[index].Value = JsonConvert.SerializeObject(value as T, serializerSettings);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,即使在这种情况下Enums也被序列化为字符串.我检查serializerSettings过没有Converters,它ContractResolvernull.

为什么会这样?

c# json json.net

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

在不使用json.net创建包装类的情况下反序列化

我最近开始使用Json.net并将现有的反序列化器从JavaScript更改为Json.Net

在这样做时,我遇到了一个实现问题.

我在Json下面:

string json = @"'Album':{
  'Name': 'Classical',
  'Date': '2005-4-7T00:00:00'
}";
Run Code Online (Sandbox Code Playgroud)

当我使用Json.net对它进行deSerializing时,我得到一个null响应:

var a = JsonConvert.DeserializeObject<Album>(json);
Run Code Online (Sandbox Code Playgroud)

我寻求帮助,发现要反序列化它,我需要创建一个Album必须属性的包装类.

但是,我有很多这样的类来反序列化它.有没有通用的方法呢?我是否需要为我的所有类创建包装器,如下所示:

public class JsonOutputWrapper
{            
    public Album Album{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我是否可以使用一些通用实现来完成此工作,而无需创建包装类:

var a = JsonConvert.DeserializeObject<Album>(json);
Run Code Online (Sandbox Code Playgroud)

c# json.net

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

使用 Topshelf 设置服务启动参数

我有一个具有多个实例的服务,每个实例具有不同的参数,目前我正在手动将这些参数(在另一个代码中)设置为注册表中服务的图像路径(例如HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\MyService$i00)。所以我们的服务安装分两步完成。

我真的很感兴趣在 Topshelf 安装中合并这些步骤,例如

MyService.exe install -instance "i00" -config "C:\i00Config.json"
Run Code Online (Sandbox Code Playgroud)

第一次尝试

AddCommandLineDefinition从 TopShelf尝试过,但它似乎只在安装和通过控制台运行期间有效,而不是服务本身(不会向服务图像路径添加任何内容)。

第二次尝试

我试图看看是否有可能在AfterInstall没有任何运气的情况下从 Topshelf做到这一点。这是一个测试代码,看看它是否会工作(但不幸的是 Topshelf 在AfterInstall调用后覆盖了注册表)。

HostFactory.Run(x =>
        {
            x.UseNLog();
            x.Service<MyService>(sc =>
            {
                sc.ConstructUsing(hs => new MyService(hs));
                sc.WhenStarted((s, h) => s.Start(h));
                sc.WhenStopped((s, h) => s.Stop(h));
            });

            x.AfterInstall(s =>
            {
                using (var system = Registry.LocalMachine.OpenSubKey("SYSTEM"))
                using (var controlSet = system.OpenSubKey("CurrentControlSet"))
                using (var services = controlSet.OpenSubKey("services"))
                using (var service = services.OpenSubKey(string.IsNullOrEmpty(s.InstanceName)
                    ? s.ServiceName
                    : s.ServiceName + "$" + s.InstanceName, true))
                {

                    if …
Run Code Online (Sandbox Code Playgroud)

c# topshelf

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

CLR如何在内部将Double/Single转换为Decimal?

我有兴趣看看.NET如何将Double/Single数据类型转换为Decimal,所以我开始研究我在下面的代码中遇到的Decimal类型结构源代码.

似乎所有其他类型的转换都在框架的类库中实现,除了double/floatCLR在外部处理.

所以,基本上问题是CLR如何进行转换?

    [MethodImpl(MethodImplOptions.InternalCall)]
    public extern Decimal(float value);

    [MethodImpl(MethodImplOptions.InternalCall)]
    public extern Decimal(double value);

    public Decimal(int value)
    {
        int num = value;
        if (num < 0)
        {
            this.flags = -2147483648;
            num = -num;
        }
        else
        {
            this.flags = 0;
        }
        this.lo = num;
        this.mid = 0;
        this.hi = 0;
    }

    [CLSCompliant(false)]
    public Decimal(uint value)
    {
        this.flags = 0;
        this.lo = (int)value;
        this.mid = 0;
        this.hi = 0;
    }

    .
    .
    .
Run Code Online (Sandbox Code Playgroud)

.net c# clr

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

如何使用 JINT 库从 Javascript 获取 JSON 值

我有这个 JavaScript 文件:

var input = {
  "CONTRATE": 0,
  "SALINC": 0,
  "RETAGE": 55.34,
  "MARSTATUS": "single",
  "SPOUSEDOB": "1970-01-01",
  "VIEWOPTION": "pension"
};

var inputValidation = "input.CONTRATE > 50 && input.SALINC < 50 && input.RETAGE > 50";

eval(inputValidation);
Run Code Online (Sandbox Code Playgroud)

如何使用 JINT 作为 JSON 对象字符串获取“输入”变量的 JSON 值?

javascript c# json jint

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

标签 统计

c# ×6

json ×2

json.net ×2

.net ×1

clr ×1

csvhelper ×1

javascript ×1

jint ×1

topshelf ×1