2017-01-17 5 views
3

Я надеюсь, что кто-то может помочь мне в этом. Я реализую функцию Azure, где я пытаюсь сериализовать XML-сообщение в .NET-объект. Это код, который я в настоящее время с помощью:Идентификатор 'Подача # 0' не соответствует CLS в функциях Azure

public static void Run(string input, TraceWriter log) 
{ 
    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(App)); 
    // more code here.... 
} 
public class App 
{ 
    public string DataB { get; set; } 
} 

Однако, я всегда получил эту ошибку: Имя

2017-01-17T12:21:35.173 Exception while executing function: Functions.ManualXmlToJson. mscorlib: Exception has been thrown by the target of an invocation. System.Xml: Identifier 'Submission#0' is not CLS-compliant. 

Параметр: идент.

Я пробовал с XmlAttributes, без них. Я добавил buildOptions:warningsAsErrors как false в файл project.json, но ничего не происходит. И, честно говоря, у меня кончились идеи, потому что этот код действительно работает в App Console.

Я думаю, что это какой-то параметр, я бы очень признателен, если кто-нибудь может предложить мне, как его исправить.

Спасибо!

+0

carlosm, интересно знать, если ответ ниже помог. Пожалуйста, сообщите нам, если у вас все еще есть проблемы. –

ответ

4

Ваш лучший вариант здесь - это фактор класса, который вы пытаетесь сериализовать, в отдельную библиотеку классов и ссылаться на эту функцию.

Если вы реализуете свой App класс выше в другой сборке, ваш код функции будет выглядеть следующим образом:

#r "<yourassemblyname>.dll" 

using System; 
using <YourClassNamespace>; 

public static void Run(string input, TraceWriter log) 
{ 
    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(App)); 
} 

Код выше предполагает частную ссылку на сборку, где вы загрузить сборку в папку бен , внутри вашей папки функций.

Вы можете узнать больше о внешних ссылках здесь: https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-csharp#referencing-external-assemblies

Я открывающий вопрос для решения ЦБСА совместимого имени, так что это не так запутанное: https://github.com/Azure/azure-webjobs-sdk-script/issues/1123

Другого вариантом стоит попробовать (что бы свести к минимуму изменения, которые вам нужно внести в ваш код), вместо этого следует использовать DataContractSerializer. Вы можете найти дополнительную информацию here.

Вот краткий пример функции с помощью DataContractSerializer (с типом выше):

#r "System.Runtime.Serialization" 

using System; 
using System.Xml; 
using System.Runtime.Serialization; 

public static void Run(string input, TraceWriter log) 
{ 
    string xml = WriteObject(new App { DataB = "Test"}); 
    log.Info(xml); 
} 


[DataContract(Name = "App")] 
public class App 
{ 
    [DataMember] 
    public string DataB { get; set; } 
} 




public static string WriteObject(App app) 
{ 
    using (var output = new StringWriter()) 
    using (var writer = new XmlTextWriter(output) { Formatting = Formatting.Indented }) 
    { 
     var serializer = new DataContractSerializer(typeof(App)); 
     serializer.WriteObject(writer, app); 

     return output.GetStringBuilder().ToString(); 
    } 
}