2016-03-28 19 views
0

このエラーが発生します 'ObjectContent`1'タイプは、コンテンツタイプ 'application/xml; charset = utf-8 'となります。混合値xml要素をシリアライズすると、エラーが発生します

予期しないタイプのデータコントラクト名を持つ 'A' ': http://schemas.datacontract.org/2004/07/'。 DataContractSerializerを使用する場合は、DataContractResolverを使用するか、または既知のタイプのリストに静的に知られていないタイプ を追加してください(たとえば、 KnownTypeAttribute属性を使用するか、DataContractSerializerに渡される既知のタイプ のリストに追加します)。

2個のタイプAまたはB

Xsd.exeでは、このようなオブジェクトを生成することができる性質を持つオブジェクトシリアライズ:

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
public partial class Doc 
{  
    [XmlElement("A", typeof(A))] 
    [XmlElement("B", typeof(B))] 
    [System.Xml.Serialization.XmlTextAttribute(typeof(string))] 
    public object Item { get; set; } 
} 

タイプA及びBは、あまりにも定義されているが、 1つのプロパティを持つ普通のクラス。

と私は罰金コンパイルが、それはシリアル化しようとしたとき、それは

+1

そして、あなたは、シリアライザコードを含めてくださいすることができますか? –

+0

クラスを['XmlSerializer'属性](https://msdn.microsoft.com/en-us/library/83y7df3e%28v=vs.110%29.aspx)でマークしていますが、あなたの例外は[ DataContractSerializer'](https://msdn.microsoft.com/en-us/library/ms731072%28v=vs.110%29.aspx)は、異なる属性を使用する完全に異なるシリアライザです。そのためのクラスを生成するには、['svcutil.exe'](https://msdn.microsoft.com/en-us/library/aa347733%28v=vs.110%29.aspx)を使う必要があります。 – dbc

+0

これはmvcプロジェクトですが、scvutil.exeを使用する必要がありますか?私はxsdしか持っていません –

答えて

0

上記のエラーは、私はどこでできますが、共通の基本クラスを必要とするかもしれないと思うスローこの

Doc d = new Doc(); 

var i = new A 
{ 
    Id = 1, 
}; 

doc.Item = i; 

のようなオブジェクトを初期化します既知の型を指定します。

[KnownType(typeof(A))] 
[KnownType(typeof(B))] 
public class AorB 
{ 
    public int Id {get;set;} 
} 

public class A : AorB 
{ 
} 

public class B : AorB 
{ 
} 

その後、ドキュメントクラスで:

public partial class Doc 
{  
    public AorB Item { get; set; } 
} 

あなたがDataContractSerializerを使用している場合あるいは、あなたはコンストラクタに既知の種類のIEnumerableをを渡すことができます。

var serializer = new DataContractSerializer(typof(Doc), new[] { typeof(A), typeof(B) }); 
関連する問題