DataContractSerializerを使用したオブジェクト内のXMLの逆シリアル化

リカルド・ビセンティーニ

私は次のxmlを持っています:

<ArrayOfString>
    <stringValues>
        <stringvalue>teste1</stringvalue>
        <stringList> 
             <stringText>stringList1</stringText>                                   
        </stringList>
    </stringValues>
</ArrayOfString>

私の契約は次のとおりです。

[KnownType(typeof(StringList))]
[DataContract(Name = "stringValues", Namespace = "")]
public class StringValues
{

    [DataMember(Name="stringvalue",Order=1)]
    public string stringvalue { get; set; }

    [DataMember(Name="stringList",Order=2)]
    public StringList stringList { get; set; }
}

[CollectionDataContract(ItemName = "stringText")]
public class StringList : List<string>
{

}

そして、逆シリアル化に使用されるコードは次のとおりです。

var testexml = @"<ArrayOfString>
                            <stringValues>
                                <stringvalue>teste1</stringvalue>
                                <stringList> 
                                    <stringText>stringList1</stringText>                                   
                                </stringList>
                            </stringValues>
                         </ArrayOfString>";

        XmlDictionaryReader stringsReader = XmlDictionaryReader.CreateDictionaryReader(XmlReader.Create(new StringReader(testexml)));
        DataContractSerializer ArrayOfString = new DataContractSerializer(typeof(List<StringValues>), "ArrayOfString", "");
        var strings = ArrayOfString.ReadObject(stringsReader);

実行すると、stringListプロパティには1つのアイテムが含まれているはずですが、代わりにゼロのアイテムが含まれています。私は信じています、私の契約に何か問題があります。誰か助けてもらえますか?

前もって感謝します!

dbc

このような逆シリアル化の問題をデバッグする最良の方法は、クラスのメモリ内の例を作成し、それを文字列にシリアル化して、取得したものと逆シリアル化したいものを比較することです。違いがある場合、それはあなたのバグです。

クラスのサンプルシリアル化XMLを作成する方法を示すコードは次のとおりです。

    private static MemoryStream GenerateStreamFromString(string value)
    {
        return new MemoryStream(Encoding.Unicode.GetBytes(value ?? ""));
    }

    private static string GetXml<T>(T obj, DataContractSerializer serializer) where T : class 
    {
        using (var textWriter = new StringWriter())
        {
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.IndentChars = "    "; // The indentation used in the test string.
            using (XmlWriter xmlWriter = XmlWriter.Create(textWriter, settings))
            {
                serializer.WriteObject(xmlWriter, obj);
            }
            return textWriter.ToString();
        }
    }

    public static string GetXml<T>(T obj) where T : class
    {
        DataContractSerializer serializer = new DataContractSerializer(typeof(T));
        return GetXml(obj, serializer);
    }

注-質問に対する完全な回答ではありませんが、コードが役立つ可能性があり、コメントするには長すぎます。

更新

OK、私はそれを自分で試しました。上位クラスのDataContractの名前空間を、ネストされたクラスの名前空間と同じに設定し、XMLファイル自体に指定されているものと同じにする必要があります。

[CollectionDataContract(ItemName = "stringText", Namespace="")]
public class StringList : List<string>
{

}

そうでない場合DataContractSerializerは、それらが異なる名前空間にあると想定し、次のようなものを期待します。

<?xml version="1.0" encoding="utf-16"?>
<ArrayOfstringValues xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <stringValues>
        <stringvalue>teste1</stringvalue>
        <stringList xmlns:d3p1="http://schemas.datacontract.org/2004/07/Clr.Namespace">
            <d3p1:stringText>stringList1</d3p1:stringText>
        </stringList>
    </stringValues>
</ArrayOfstringValues>

Clr.Namespaceクラスを定義したCLR名前空間はどこにありますか。(はい、DataContractSerializer c#名前空間に基づいてデフォルトの名前空間を割り当てているようですが、それ以外の指示はありません。)

ContractNamespaceこれを繰り返し行う必要がない場合は、モジュール全体またはアセンブリ全体で属性を使用することもできます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

GSONを使用したKotlinオブジェクトの逆シリアル化

分類Dev

dartを使用したオブジェクトの逆シリアル化/シリアル化

分類Dev

ルート内の数値オブジェクトを使用してJSONを逆シリアル化します

分類Dev

JSONシリアライザーを使用したMongoDBオブジェクトIDの逆シリアル化

分類Dev

オブジェクトへのパラメータを使用してXMLを逆シリアル化します

分類Dev

Jacksonを使用した逆シリアル化中にlist属性内のオブジェクトのリストをグループ化する

分類Dev

XMLを特定の方法でオブジェクトに逆シリアル化したい

分類Dev

RestTemplateを使用したネストされたオブジェクトのJava Spring逆シリアル化

分類Dev

Jacksonを使用したJSON応答内のネストされたオブジェクトからのフィールドの逆シリアル化

分類Dev

Gsonを使用して、別のオブジェクト内のオブジェクトの配列を逆シリアル化します

分類Dev

不明な形式のDataContractSerializerを使用したc#xmlの逆シリアル化

分類Dev

オブジェクトxmlのシリアル化/逆シリアル化

分類Dev

JSON4Sを使用したScalaでのケースオブジェクトの逆シリアル化

分類Dev

C#NewtonsoftJSON-不明なオブジェクトのコレクションを使用したオブジェクトの逆シリアル化

分類Dev

JSON-Gsonを使用した動的オブジェクトの逆シリアル化

分類Dev

Json.netを使用したJSONオブジェクト配列の逆シリアル化

分類Dev

不明なオブジェクト名を使用したJSONの逆シリアル化

分類Dev

フラッターでjson_serializableを使用したjsonオブジェクトの逆シリアル化

分類Dev

Javaのオブジェクト内のジェネリックオブジェクトを逆シリアル化します

分類Dev

オブジェクトのArraylistを逆シリアル化します

分類Dev

別のオブジェクトを含むjsonオブジェクトを逆シリアル化します

分類Dev

オブジェクト内のelasticsearch応答を逆シリアル化します

分類Dev

XMLをC#のオブジェクトに逆シリアル化するXmlRootが機能しない

分類Dev

Jackson2.0を使用したマップ内のJSONオブジェクトのシリアル化

分類Dev

json.netを使用したオブジェクトプロパティの条件付きシリアル化/逆シリアル化

分類Dev

jms / serializerを使用してオブジェクトの配列を逆シリアル化します

分類Dev

JSONオブジェクトの型を使用してJSONをPOJOに逆シリアル化します

分類Dev

BinaryFormatterを使用して不明なタイプの.NETオブジェクトを逆シリアル化します

分類Dev

オブジェクトのリストを使用した非シリアル化/シリアル化

Related 関連記事

  1. 1

    GSONを使用したKotlinオブジェクトの逆シリアル化

  2. 2

    dartを使用したオブジェクトの逆シリアル化/シリアル化

  3. 3

    ルート内の数値オブジェクトを使用してJSONを逆シリアル化します

  4. 4

    JSONシリアライザーを使用したMongoDBオブジェクトIDの逆シリアル化

  5. 5

    オブジェクトへのパラメータを使用してXMLを逆シリアル化します

  6. 6

    Jacksonを使用した逆シリアル化中にlist属性内のオブジェクトのリストをグループ化する

  7. 7

    XMLを特定の方法でオブジェクトに逆シリアル化したい

  8. 8

    RestTemplateを使用したネストされたオブジェクトのJava Spring逆シリアル化

  9. 9

    Jacksonを使用したJSON応答内のネストされたオブジェクトからのフィールドの逆シリアル化

  10. 10

    Gsonを使用して、別のオブジェクト内のオブジェクトの配列を逆シリアル化します

  11. 11

    不明な形式のDataContractSerializerを使用したc#xmlの逆シリアル化

  12. 12

    オブジェクトxmlのシリアル化/逆シリアル化

  13. 13

    JSON4Sを使用したScalaでのケースオブジェクトの逆シリアル化

  14. 14

    C#NewtonsoftJSON-不明なオブジェクトのコレクションを使用したオブジェクトの逆シリアル化

  15. 15

    JSON-Gsonを使用した動的オブジェクトの逆シリアル化

  16. 16

    Json.netを使用したJSONオブジェクト配列の逆シリアル化

  17. 17

    不明なオブジェクト名を使用したJSONの逆シリアル化

  18. 18

    フラッターでjson_serializableを使用したjsonオブジェクトの逆シリアル化

  19. 19

    Javaのオブジェクト内のジェネリックオブジェクトを逆シリアル化します

  20. 20

    オブジェクトのArraylistを逆シリアル化します

  21. 21

    別のオブジェクトを含むjsonオブジェクトを逆シリアル化します

  22. 22

    オブジェクト内のelasticsearch応答を逆シリアル化します

  23. 23

    XMLをC#のオブジェクトに逆シリアル化するXmlRootが機能しない

  24. 24

    Jackson2.0を使用したマップ内のJSONオブジェクトのシリアル化

  25. 25

    json.netを使用したオブジェクトプロパティの条件付きシリアル化/逆シリアル化

  26. 26

    jms / serializerを使用してオブジェクトの配列を逆シリアル化します

  27. 27

    JSONオブジェクトの型を使用してJSONをPOJOに逆シリアル化します

  28. 28

    BinaryFormatterを使用して不明なタイプの.NETオブジェクトを逆シリアル化します

  29. 29

    オブジェクトのリストを使用した非シリアル化/シリアル化

ホットタグ

アーカイブ