問題タブ [xml-deserialization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - C# での XML シリアル化
XMLシリアライゼーションに関するマイクロソフトのチュートリアルに従おうとしていますが、いくつかの問題が発生しています!!
これは、入力として使用される XML ファイルです。
これは、XML をバインドするクラスです。
この関数は、XML を「OrderedItem」クラスに読み込みます。
これは、読み取って書き直した後の XML です。
ご覧のとおり、名前空間が展開されています。uri の代わりに名前空間ラベルを使用して同じ XML を取得するには、出力をどのように記述すればよいですか?
c# - 動的/変数の内部 XML を逆シリアル化する
XML 構成ファイルがあります。
固定要素でシリアライゼーションとデシリアライゼーションを行っています。しかし、未知のユーザー定義要素を読みたいです。
どうすればいいですか?
私はこのようにしようとしていますが、何も返されません [XmlText] public String UserDefinedElement{ get; 設定; }
答えてくれてありがとう。
java - XML デシリアライザーでの奇妙な動作
SAX の使用中に Java で奇妙な動作が発生します。値が設定されていますが、出力の toString メソッドでデフォルト値に戻ります。これは本当に珍しいようです。私はコードを調べて、変数のメモリ アドレスを出力しました。すべてが正しい順序で行われ、正しく行われているように見えます。他のデシリアライズされた XML 要素は問題ないので、解決できません。
私のシステムは次のように機能します。ユーザーが属性ヘルパーと要素ハンドラーを定義する抽象メソッドを持つクラスがあります。要素ハンドラーはサブ XML 要素に基づいてサブクラスの生成を処理しますが、属性ハンドラーはコンストラクターから属性リストを受け取り、属性ヘルパーを介してこれを使用して、属性ヘルパーに実装された抽象メソッドを介してフィールドを設定します。
問題のあるクラスは次のとおりです。
また、属性が検索され、関連する実装メソッドが呼び出されるデバッグ出力もいくつかあります。
とにかく、ここに出力があります:
メモリの値に注意してください。これはかなり奇妙です。(変換されたルート XML 要素からの) toString 出力全体が最後の行にあります。
とにかく、助けてくれてありがとう、
クリス
編集:0ではなく、変数にいくつかの異なるデフォルト値を設定しました:
そして、ここに設定中の結果があります:
そのため、最初は奇妙なことが起こっています。値は 1000 ではなく 0 です。非常に奇妙です。最終的な出力になると、出力されるオブジェクトの値は 0 (フィールドのデフォルトの初期値) ではなく 1000 になります。
Edit2:ヘッダーに次のものがあります。
属性が設定されると減少します。例は次のとおりです。
oString ステートメントは次のようになります。
印刷物には次のように書かれています。
属性セッターと toString の同期ステートメントは、JVM のバグをチェックするためにここにありましたが、何もしませんでした。変でしょ?
編集3:
フィールドを Atomic* に変更しました。アトミック フィールドが最終的なものであり、内部でデフォルト値が設定されており、NullPointerException が発生していることを確認して、これを JVM のバグに真剣に取り組まなければなりません。
例外:
編集 4: JDK1.7 から 1.6 の安定バージョンに変更しましたが、同じ問題です。
たぶん、フィールドはコンストラクター中に設定解除され、後で設定されます。初期化の順番はよくわかりませんが、この場合はめちゃくちゃになっているのかもしれません。とにかく、それを init メソッドに入れて、それが何かを行うかどうかを確認します。ただし、単一のクラスの場合は機能しないのは奇妙です。それは他の人のために働きます。
c# - 特殊文字を使用して XML をデシリアライズする高速な方法
ö のような特殊文字を含む xml を逆シリアル化する高速な方法を探しています。
私は XMLReader を使用していましたが、そのような文字をデシリアライズできません。
なにか提案を?
編集: C# を使用しています。コードは次のとおりです。
xml - Actionscript で XML 文字列をオブジェクトに変換する
私はASにかなり慣れていません。これを行う方法があると思いますが、それを理解していません。基本的に、xmlを返し、xmlの構造に関係なくオブジェクトを返すサービスを使用しようとしています。.Net ではXmlSerializer.Deserializeクラスを使用しています... AS に相当するものはありますか?
SimpleXMLDecoderを見つけることができましたが、動作させることができないようです。また、ノードでのみ動作するように見えますか? いずれにせよ、そこにある例はまばらで従うのが難しいです.xmlを次のように取得する方法を知りたいだけです:
そして、それをオブジェクトに変換するだけです。これは、独自のパーサーを作成しなくても可能ですか? ありがとうございました。
c# - c#を使用して配列要素内の配列要素を逆シリアル化する
私のXMLファイルは次のようになります。
ItemCollection内のアイテムにアクセスしようとしていますが、これまでのところ、運がまったくありません。これは私のコードがどのように見えるかです:
そして私のオブジェクトは次のようになります:
バージョンは問題なく取得でき、階層は問題なく表示されますが、ItemオブジェクトのNameとAgeは常にnullです。XmlArrayの代わりにXmlElementを試しましたが、それも機能しません。
これを達成する方法についての助けは大歓迎です!!!
編集:私が示した例は、受け取ったXMLを単純化したものです。これは実際にはBINGAPIからロケーションRESTサービスへの呼び出しです。私が取得するXMLは、次のURLのXMLのようになります。
http://msdn.microsoft.com/en-us/library/ff701710.aspx
構造に入れようとしているのは、Location要素内の情報です。
私の実際のオブジェクトは次のようになります。
うまくいけば、これは私がここで達成しようとしていることをさらに明確にするでしょう。
ありがとう!
c# - 複数の可能な名前空間を持つC#逆シリアル化xml
サードパーティのRESTAPIを使用するためのAPIラッパークラスライブラリを作成しました。
製品の最新バージョンでAPIを最近更新し、ルート要素に名前空間を追加するまではすべて機能していましたが、現在、逆シリアル化コードは失敗しています。
私のクラスの1つの例:
XmlRootAttributeのNamespaceプロパティを、返される新しい名前空間に設定すると、再び正しく機能します。
ただし、どちらのバージョンのAPIが使用可能になるかわからないため、両方のバージョンのAPI(名前空間とそうでない)をサポートする必要があります。
異なるバージョンのクラスを複製せずにこれを機能させたいのですが、それが可能かどうかはわかりません。
入力/アドバイスをありがとう。
c# - 関連するクラスの名前を変更した後の XmlDeserialization
データベースに一連の xml シリアル化オブジェクトがあります。
しかし、関連するクラスをリファクタリングして名前を変更したため、データベースからのデシリアライズは困難です。
名前を変更したクラスの上に用語を追加することで問題が解決すると思いました[XmlRoot("DB_Class_Name")]
が、そうではないようです。
クラスの名前を古いクラス名に変更したり、特別な逆シリアル化関数を作成したりせずに[XmlRoot]
、などのラベルを使用して問題を解決する方法はありますか?[XmlElement]
また、 xmldeserializaiton と次のようなラベルを使用するときに内部で何が起こっているかについての良い情報源はあります[XmlRoot]
か?
c# - CityGML デシリアライゼーションの問題
現在、CityGML (デ) シリアライザーに取り組んでいます - 特定の対応するオブジェクトに C# クラスが必要です - System.Xml.Serialization.XmlSerializer インスタンスに必要なルート クラスに問題があります。ここにいる全員が CityGML にどれほど精通しているかはわかりませんが、ここで状況を説明します。クラスの作成方法についても説明しました。これをスキップしたい場合は、/ /* マークから読み始めることができます。
CityGML は複数の .xsd ファイルで構成され、それぞれが特定のタイプの要素 (appearance.xsd、transports.xsd、building.xsd、vegetation.xsd など) を記述するモジュールであり、ルート ファイル CityGML.xsd も含まれます。ご想像のとおり、各モジュールにはこのルート ファイルの要素が必要です。また、CityGML は実際には GML から多くを継承しているため、GML .xsd ファイルからのインポートも必要です。
これまでのところ、C# クラスの生成に関して、従来の xsd.exe を使用する 2 つの方法を試しました。 - 必要なすべての CityGML クラスを含む単一の .cs ファイルを作成する - 単一のコマンド ライン:
各コマンドについて、最後の .xsd は目的のモジュールであり、その他は必要なインポートです。
残念ながら、xsd.exe は他の .xsd ファイルからのインポートを処理し、インポートされたファイルからだけでなく、必要なファイルのクラスを作成しますが、これらのクラスすべてを 1 つの .cs ファイルにスタックして、これを非常に「直接」行います。どうやら、異なる .cs ファイル内のインポートされたクラスから目的のクラスを分離する方法はありません。したがって、私の最初の質問は、インポートされた .XSD ファイルを処理し、特定の .CS ファイル階層を作成する、XSD.EXE に類似した (デ) シリアル化ツールはありますか? これにより、たとえば、上記のすべてのモジュール .cs ファイルで feature.xsd のクラスの繰り返しが回避されます。
/ /*
次に進むと、実際に問題を引き起こしている問題は XmlSerializer インスタンスに関連しています。これは、階層全体のルート クラスでもある基本の CityGML オブジェクト タイプである CityModelType が完全に有効ではないため、作成できません。
この割り当ては、最初に XmlTextAttribute を使用して string[] を定義することに関するエラーを引き起こし、CityModelType の「反映」を不可能にしました。XmlTextAttribute を XmlAttributeAttribute に置き換えましたが、その発信元を追跡できなかった現在のメッセージは次のとおりです (はい、フランス語で作業しています)。
まず、LineStringSegmentType の唯一の発生は曲線に関連しており、.gml ファイルでは使用していません。それらは次のように定義されます。
...そして、それらはここで使用されます:
...この gml:geometryPrimitives.xsd フラグメントから来ています:
どこに問題があるのか わかりません。これは非常に奇妙です。ご連絡をお待ちしております。ありがとう。
乾杯、ビクター
c# - 祖先クラスのタイプしかわからない場合、XMLを逆シリアル化するにはどうすればよいですか?
これを逆シリアル化したいと仮定しましょう(物事を簡単にするために名前空間を削除しました):
TextFieldはFormFieldを継承しているため、FormFieldのクラス定義では次のようになります。
TextFieldクラスは次のようになります。
これを使用して逆シリアル化を試みました:
SerializationExceptionが発生します:「要素'FormField'を期待しています...」