总而言之,我有一个dll,其主要工作是从LabView程序获取数据,然后使用所述数据处理一些后端工作。
一旦数据被发送到dll(通过调用具有多个参数的.NET对象的方法 - 见下文)并正确解析为.NET对象,如果有什么变得“坏”(连接到db,任何其他失败)保持数据)我获取数据并以json文件的形式将其序列化到机器上的本地文件夹中。我正在使用Newtonsoft.Json 6.0.8
作为该项目的json方面。
public class MainClass
{
public void saveData(string[] someNames, string[] someValues)
{
// here I parse the data passed in, and create the .NET object I work with try
{
// here I write data to the database, do whatever else I need to do
}
catch (System.Exception ex)
{
// if ANYTHING goes wrong with the persist of data, write json to local file
}
}
}
这是我序列化数据的方式:
private void writeParentToJson(ParentClass parent)
{
using (var printer = new StreamWriter(filePath, false))
{
var izer = new JsonSerializer();
izer.TypeNameHandling = TypeNameHandling.All;
izer.Serialize(printer, parent);
}
}
[JsonObject]
public class ParentClass
{
[JsonProperty("childThings")]
public List<ChildClass> listOfChildClass { get; set; }
public ParentClass()
{
}
public ParentClass(List<ChildClass> listOfChildClass)
{
this.listOfChildClass = listOfChildClass;
}
}
[JsonObject]
public class ChildClass
{
[JsonProperty("childName")]
public string name { get; set; }
[JsonProperty("childValue")]
public string value { get; set; }
public ChildClass()
{
}
public ChildClass(string name, string value)
{
this.name = name;
this.value = value;
}
}
当发生这种情况时,一切都写得很好json文件。当我再次读取数据时,我就是这样做的:
public ParentClass loadParentFromJson()
{
using (var reader = new JsonTextReader(new StreamReader(filePath)))
{
var izer = new JsonSerializer();
izer.TypeNameHandling = TypeNameHandling.All;
return izer.Deserialize<ParentClass>(reader);
}
}
当我创建一个.NET项目并使用这个dll时......一切都完美无瑕。问题是使用LabView的人不是那么幸运。当dll 将数据写入文件时,一切正常,但读取它是我们遇到问题的地方。
更具体地说,会发生这种情况:内部异常:Newtonsoft.Json.JsonSerializationException:在程序集'mscorlib中找不到类型'System.Collections.Generic.List`1 [[MyDll.ChildClass,MyDll]]', Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'
我对LabView一无所知,使用LabView的人对.NET一无所知。任何见解将不胜感激。
LabView程序只调用方法,dll会完成json的所有读/写操作...这就是为什么我不知道它对我有用的原因,但是从LabView程序调用时却没有。
所有计算机都安装了.NET 4.0框架..我看到其他人遇到此异常,但只有在从LabView程序调用时才会失败..而且我不知道为什么。
答案 0 :(得分:0)
http://zone.ni.com/reference/en-XX/help/371361K-01/lvhowto/configuring_clr_version/
http://digital.ni.com/public.nsf/allkb/4742EB60B64BE22186257BCE0053B8FD
这些描述设置LabVIEW.exe.config文件以允许使用第三方.Net程序集(以及不同的.Net版本),最终我最终得到一个LabVIEW.exe.config,如下所示:
<?xml version ="1.0" encoding="utf-8" ?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"/>
</startup>
<runtime>
<loadFromRemoteSources enabled="true" />
</runtime>
</configuration>