2017-01-17 18 views
3

私は誰かがこの問題について私を助けてくれることを願っています。私はAzure関数を実装しています。ここでXMLメッセージを.Netオブジェクトにシリアライズしようとしています。識別子「Submission#0」は、Azure関数ではCLSに準拠していません

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. 

パラメータ名:IDENTこれは私が現在使用しているコードです。

XmlAttributesを使用せずに試してみました。私はbuildOptions:warningsAsErrorsfalseとして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)); 
} 

上記のコードを使用すると、binフォルダにあなたの組み立てをアップロードするプライベートアセンブリ参照を、前提としてい、あなたの関数のフォルダの中に。

あなたがここに外部参照についての詳細を見つけることができます:https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-csharp#referencing-external-assemblies

を私はCLSに準拠し名前に対処するために問題を開いていますので、これはのように混乱はない: 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(); 
    } 
} 
関連する問題