【问题标题】:Code works in VS but fails in Azure Functions代码在 VS 中有效,但在 Azure Functions 中失败
【发布时间】:2017-06-25 11:39:54
【问题描述】:

下面的代码在 Visual Studio 中工作,但失败了

函数.HttpTriggerCSharp1。 Newtonsoft.Json: JSON 'JliffModel.Segment, JliffModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'中指定的类型与'JliffModel.ISubUnit, JliffModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'。路径'units[0].segments[0].$type',第 9 行,位置 28。

在 Azure 函数中。这是 Functions 运行时的问题吗?

var model2 = new JliffModel.File("en-US", "de-DE",
        new List<JliffModel.Unit>()
        {
            new JliffModel.Unit("1",
                new JliffModel.Segment(
                    new List<JliffModel.IElement>() {new JliffModel.TextElement("New fluent source.")},
                    new List<JliffModel.IElement>() {new JliffModel.TextElement("New fluent target.")}
                )
            ),
            new JliffModel.Unit("2", new List<JliffModel.ISubUnit>() {
                new JliffModel.Segment(
                    new List<JliffModel.IElement>() {new JliffModel.TextElement("Unit 2, Segment 1 source")},
                    new List<JliffModel.IElement>() {new JliffModel.TextElement("Unit 2, Segment 1 target")}
                ),
                new JliffModel.Ignorable()
            })
        });

    var binder = new JliffModel.JliffSerializationBinder("JliffModel.{0}, JliffModel");

    string output = JsonConvert.SerializeObject(model2, 
        Formatting.Indented,
        new JsonSerializerSettings
        {
            ContractResolver = new CamelCasePropertyNamesContractResolver(),
            TypeNameHandling = TypeNameHandling.Auto,
            Binder = binder
        });

    var model = JsonConvert.DeserializeObject<JliffModel.File>(output,
                new JsonSerializerSettings
                {
                    TypeNameHandling = TypeNameHandling.Auto,
                    Binder = binder
                });

【问题讨论】:

    标签: json.net azure-functions


    【解决方案1】:

    您可能在 Azure 函数上使用不同版本的 Newtonsoft.Json 本地。在日志中可以看到加载了什么版本,例如:

    xxxx-xx-xxT19:02:52.800 Installing Newtonsoft.Json x.x.x.
    

    看看有没有区别。您可以在 project.json 文件中放置特定版本:

    {
      "frameworks": {
        "net46":{
          "dependencies": {
            "Newtonsoft.Json": "9.0.1"
          }
        }
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多