2

私は2つのコードを持っています

コード1

string json = @"{""properties"":{""name"":""carl""}}";
try
{
    MemoryStream stream = GetMemoryStreamFromString(json);
    Type type = typeof(Person);
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(type);
    object obj = serializer.ReadObject(stream);
    Debug.WriteLine(obj);
    Person person = obj as Person;
}
catch (Exception ee)
{
    Debug.WriteLine(ee.Message);
}

//And my classes
[DataContract]
public class Person
{
    [DataMember]
    public Property properties { set; get; }

    public Person() { }
}

[DataContract]
public class Property
{
    [DataMember]
    public string name { set; get; }

    public Property() { }
}



コード 2

string json = @"{""properties"":{""name"":""carl""}}";
try
{
    MemoryStream stream = GetMemoryStreamFromString(json);
    Type type = typeof(Person);
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(type);
    object obj = serializer.ReadObject(stream);
    Debug.WriteLine(obj);
    Person person = obj as Person;
}
catch (Exception ee)
{
    Debug.WriteLine(ee.Message);
}

//And my class
[DataContract]
public class Person
{
    [DataMember]
    public Dictionary<string,string> properties { set; get; }

    public Person() { }
}

Code1 は正常に動作しますが、Code2 は例外です。ここにログがあります

メンバー 'プロパティ' が公開されていないため、データ コントラクト型 'ScrollViewExample.Person' を逆シリアル化できません。メンバーを公開すると、このエラーが修正されます。または、内部メンバーのシリアル化を有効にするために、アセンブリを内部にし、InternalsVisibleToAttribute 属性を使用することもできます。詳細については、ドキュメントを参照してください。これを行うと、特定のセキュリティ上の影響があることに注意してください。

ここでの問題はproperties、キーを持つことができる構造が定義されていないため、クラスを定義できないことです。問題があり、調査した結果、辞書を解析できないことがわかったため、この質問を投稿しています。だから私はあなたがあなたの入力を与えることができるように、私の問題をより単純なものに組み立てています

4

1 に答える 1

1

残念ながらDataContractJsonSerializer、あなたのjsonデータは

  {"properties":[{"Key":"Name","Value":"Valorie"},{"Key":"Month","Value":"May"},{"Key":"Year","Value":"2013"}]}

Json.NETを使用してjsonを解析することをお勧めします

于 2013-07-17T05:17:27.443 に答える