从LabView程序调用时,Json不反序列化List <t>

时间:2015-05-06 14:48:31

标签: c# dll json.net labview

总而言之,我有一个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程序调用时才会失败..而且我不知道为什么。

1 个答案:

答案 0 :(得分:0)

每次我在LabVIEW上使用新的安装时,NI都会提供一些应用笔记:

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>