4

asp.net-mvc Web サイトがあり、データベースから Json 文字列を読み込んでいます。DB 内の次の json を次に示します。次のようになります。

{"description": "Test", "contacts": ["joe@gmail.com", "bill@yahoo.com"], "enabled": true}

またはこれ:

{"description": "Test", "contacts": "joe@gmail.com, bill@yahoo.com", "enabled": true}

ご覧のとおり、連絡先フィールドは次のいずれかです。

  1. 文字列 (コンマで区切られた項目を含む)
  2. 文字列の配列。

このクラスに変換したい:

public class MyJob
{
    public string description;
    public string[] contacts;
    public string enabled;
}

JavascriptSerializer() を使用して、文字列だけに割り当てようとすると (上記をこれに変更します: public string contacts; ):

var serializer = new JavaScriptSerializer();
string contacts = serializer.Deserialize<MyJob>(theAboveJsonString).contacts;

配列の場合にこのエラーが発生します: Type 'System.String' is not supported for deserialization of an array.

次の場合を処理するためにこれを逆シリアル化する最良の方法は何ですか:

  1. 文字列
  2. 文字列の配列。

お問い合わせ欄に。必要な条件付きロジックを喜んで配置します。.

私はこれを試しました:

  var contacts = serializer.Deserialize<MyJob>(theAboveJsonString).contacts;
        if (contacts is string)
        {
            jobInfo.contacts = contacts;
        }
        else
        {
            jobInfo.contacts = String.Join("; ", contacts );
        }

しかし、配列の場合に上記のエラーがまだ発生しているため、修正されていないようです

4

3 に答える 3

2

試す

  var contacts = (new JavaScriptSerializer().DeserializeObject(theAboveJsonString) as Dictionary<string, object>)["contacts"];

  if (contacts is object[])
  {
      jobInfo.contacts = String.Join("; ", contacts as object[]);
  }
  else
  {
      jobInfo.contacts = contacts.ToString(); 
  }

参照については、 MSDNここを参照してください。

于 2012-04-13T13:50:24.517 に答える
0

ここでいくつかの詳細に興味があるかもしれません: JSON.net - フィールドは文字列または List<string> のいずれかです

Json.NET を使用する場合は、次の関数を使用します。

public string[] getAsArray(JToken token)
{
    if (token.HasValues)
    {
        return token.Select(m => string(m)).ToArray();
    }
    else
    {
        return ((string)token).Split(",").Select(s => s.Trim()).ToArray();
    }
}

次に使用法:

var json = "...";
JObject o = JObject.Parse(json);
string[] contacts = getAsArray(o["contacts"]);

どちらの JSON でも、結果は同じになります。

于 2012-04-13T13:47:58.590 に答える
-2

プレーンな文字列ではなく、連絡先を文字列配列に逆シリアル化してみてください。

string[] contacts = serializer.Deserialize<MyJob>(theAboveJsonString).contacts;

JSON 変数がプレーン文字列を保持している場合は、次を使用します。

string[] contacts = serializer.Deserialize<MyJob>(theAboveJsonString).contacts.Split(',');
于 2012-04-13T13:32:31.093 に答える