2016-07-28 4 views
1

文字列をオブジェクトに解析しようとしています文字列をオブジェクトに解析するC#

ここは文字列です。

string result = {"Status":true,"StatusCode":"OK","MessageList":[[1,1,"[email protected]","Google Inc","\/Date(1469685360000)\/","Seatle","Another String"]]} 

ここにはクラスがあります。

[DataContract] 
    public class Login 
    { 
     [DataMember] 
     public bool Status { get; set; } 
     [DataMember] 
     public string StatusCode { get; set; } 
     [DataMember] 
     public string[] MessageList { get; set; } 

    } 

ここにコードがあります。

Login asd = new JavaScriptSerializer().Deserialize<Login>(result); 

私はこの分野で新しいですので、私はそれがどのように

+2

標準のjsonシリアライザを使用する方がよいでしょうか? NuGetのNewtonsoft.Jsonのように。はるかに使いやすく、便利なドキュメントがたくさんあります。 – VitaliyK

+3

それはあなたのために働いていない場合は、理由を指定してください - あなたはエラーが発生しますか? ... –

+1

JSON文字列の 'MessageList'は、文字列の配列ではなく、文字列の配列の配列です。 –

答えて

1

JSON文字列のMessageListは、文字列の配列ではなく、文字列の配列の配列です。今public string[][] MessageList { get; set; }

[DataContract] 
public class Login 
{ 
    [DataMember] 
    public bool Status { get; set; } 
    [DataMember] 
    public string StatusCode { get; set; } 
    [DataMember] 
    public string[][] MessageList { get; set; } 
} 

にクラス定義でMessageListプロパティを更新し 、デシリアライズは動作するはずです。

static void Main(string[] args) 
{ 
    string result = "{\"Status\":true,\"StatusCode\":\"OK\",\"MessageList\":[[1,1,\"[email protected]\",\"Google Inc\",\"\\/Date(1469685360000)\\/\",\"Seatle\",\"Another String\"]]}"; 
    Login asd = new JavaScriptSerializer().Deserialize<Login>(result); 
    Console.ReadLine(); 
} 
+0

ありがとうございました。それが私が探しているものです – NewPHPer

4

あなたの「string」が実際には文字列ではありませんコードに多くのアイデアを持っていません。引用符をエスケープするには、バックスラッシュを使用するか、ここで二重引用符で囲んだ文字列を使用します。

@"{""Status"":true,""StatusCode"":""OK"",""MessageList"":[[1,1,""[email protected]"",""Google Inc"",""\/Date(1469685360000)\/"",""Seatle"",""Another String""]]}" 

あなたのデータ形式は、あなたのクラスと一致していない、あなたはあなたのデータは別の配列を含む配列であると思わ文字列の配列、...

+0

まず、あなたの訴えに感謝します。しかし、私は文字列で遊ぶことはできません。それは別の層から来ています。 – NewPHPer

+0

別のレイヤーからのものであれば、それをサンプルコードの変数に代入するのはなぜですか?返される文字列を表示してください、または意味のある回答を返すことはできません – Milney

0

としてMessageListを宣言した試し

Login data = Json.Decode<Login>(result); 

msdnthis投稿をご覧ください。

+1

新しい '動的な'?なぜあなたはそれを(それがCOMでないなら)使用しますか?少なくともジェネリック版を使用して、 'Login data = Json.Decode (result);'を実行してください。 – CompuChip

+0

msdnからのリンクを見てください。これは、Json.Decodeを使用する方法の一例にすぎません。 – thirstyAndreas

+0

私はリンクを見て、therreが汎用バージョンであることを確認します。もっと良い例があるとしますか(その場合、あなたの記事の例を更新するほうが良いでしょう)、あるいは「動的」の使用を主張すること(つまり、それは私を驚かせるでしょうし、場合である)。 – CompuChip