小编And*_*lin的帖子

在.netstandard 2.0上迁移后无法编译简单的动态代码(CodeDom抛出System.PlatformNotSupportedException)

尝试编译此代码示例:

var c = new CSharpCodeProvider();
var cp = new CompilerParameters();
var className = $"CodeEvaler_{Guid.NewGuid().ToString("N")}";
// doesn't work with or without netstandard reference
var netstandard = Assembly.Load("netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51");
cp.ReferencedAssemblies.Add(netstandard.Location);
cp.CompilerOptions = "/t:library";
cp.GenerateInMemory = true;

var sb = new StringBuilder("");

sb.Append("namespace Jobs.Dynamic{ \n");
sb.Append($"public class {className} {{\n");
sb.Append($"public object RunSnippetCode()\n{{\n");
sb.Append("\nreturn null;\n");
sb.Append("\n}\n");
sb.Append("}");
sb.Append("}");

CompilerResults cr = c.CompileAssemblyFromSource(cp, sb.ToString());
Run Code Online (Sandbox Code Playgroud)

在.netstandard 2.0上进行迁移之前,一切正常

必须生成一个简单的类,并且只要复制代码并在Visual Studio中运行它,它就可以工作。具有一个返回null的方法的类。现在,CompileAssemblyFromSource方法将引发

System.PlatformNotSupportedException:该平台不支持该操作。在Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(CompilerParameters options,String [] fileNames)在Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch(CompilerParameters选项,String []源)在CnetContent.Jobs.Dyn。 ctor(IEnumerable 1 referencedAssemblies, IEnumerable1 usings,String methodArgs,String codeSnippet)在CnetContent.Jobs.Core.JobBase.EvalRunCondition(String&错误)

我更新了System.CodeDom,并且此库支持.netstandard …

c# codedom system-codedom-compiler .net-standard-2.0

7
推荐指数
1
解决办法
2206
查看次数

为 MongoDb 处理可为空和不可为空类型的自定义序列化程序

我需要使用 IBsonSerializer 实现自定义序列化器。

这就是我所做的:

internal class MyCustomDateTimeSerializer : IBsonSerializer
{
   public object Deserialize(BsonDeserializationContext context, 
         BsonDeserializationArgs args)
   {
       // Deserialization logic
   }

   public void Serialize(BsonSerializationContext context, 
         BsonSerializationArgs args, object value)
   {
       // Serialization logic
   }

   public Type ValueType => typeof(DateTime);
}
Run Code Online (Sandbox Code Playgroud)

然后在 BsonSerializerAttribute 中使用它:

[BsonSerializer(typeof(MyCustomDateTimeSerializer))]
Run Code Online (Sandbox Code Playgroud)

我的问题是我想序列化/反序列化 DateTime 和 Nullable DateTime。

我的 CustomSerializer 的 ValueType 设置为 typeof(DateTime),因此我得到如下异常:

序列化程序的值类型为 System.DateTime 且与成员类型 System.Nullable`1[[System.DateTime..

我没有找到这个问题的任何解决方案。当然,我可以为 Nullable DateTime 和 DateTime 创建两个不同的类,但也许还有另一种选择?

c# serialization mongodb mongodb-.net-driver

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