2013-06-03 48 views
39

これで、http接続経由でPOSTコマンドを送信しようとしています.JSONフォーマットを使用してPOSTコマンドを送信しようとしています。私はC#でこれを行うプログラムを書いていて、JSONとしてサーバに渡すために値の配列をどのようにフォーマットするのだろうと思っていました。現在C#でのJSON配列の作成

私はこれを持っている:

JSONでこれに変換

new {name = "command" , index = "X", optional = "0"}

"name": "command", 
"index": "X", 
"optional": "0" 

をそして私は、各要素が、以下の3つの値を含む配列と呼ばれるアイテムを、作りたいです。したがって、基本的にオブジェクトの配列であり、オブジェクトには名前、インデックス、およびオプションのフィールドが含まれます。

私の推測では、それはこの線に沿って何かだろうということでした

:それは正しい構文であれば、JSONでこれに翻訳するでしょう、

new {items = [(name = "command" , index = "X", optional = "0"), 
       (name = "status" , index = "X", optional = "0")]} 

:明らかに

"items": 
[ 
    { 
     "name": "command", 
     "index": "X", 
     "optional": "0" 
    }, 
    { 
     "name": "status", 
     "index": "X", 
     "optional": "0" 
    } 
] 

しかし、私は間違っているよ。アイデア?どんな助けもありがとうございます。

+0

C#はJSONリテラルを持っていません。匿名の型を使用する必要があります。 – SLaks

+0

それは私がやっていることです。したがって、 'new' – Nealon

+0

JSONのサービス化を提供する場合は、http://stackoverflow.com/questions/13278459/json-serialization-in-c-sharpをご覧ください。 – gustavodidomenico

答えて

65

もうすぐです。これは、トリックを行う必要があります。

new {items = new [] { 
    new {name = "command" , index = "X", optional = "0"}, 
    new {name = "command" , index = "X", optional = "0"} 
}} 

ソースがある種の列挙可能だった場合、あなたはこれをしたいかもしれません:

new {items = source.Select(item => new 
{ 
    name = item.Name, index = item.Index, options = item.Optional 
})}; 
+0

が完璧です。ありがとうございました。 – Nealon

+0

@Dave動的に行う必要がある場合はどうしたらいいですか? forループのように? – CodeEngine

+1

あなたがforループの場合は、匿名型を使用する代わりに実際のモデルを作成する必要があります。 LINQを使用することができれば(そして私が好きなら)、私の例のように匿名モデルに結果を単純に「プロジェクト」することができます。 –

25

あなたがより良いの代わりに使用して、各項目のためのいくつかのクラスを作成したいです匿名のオブジェクト。そして、あなたが直列化しているオブジェクトでは、それらのアイテムの配列を持つ必要があります。例えば:

public class Item 
{ 
    public string name { get; set; } 
    public string index { get; set; } 
    public string optional { get; set; } 
} 

public class RootObject 
{ 
    public List<Item> items { get; set; } 
} 

使用法:

var objectToSerialize = new RootObject(); 
objectToSerialize.items = new List<Item> 
          { 
          new Item { name = "test1", index = "index1" }, 
          new Item { name = "test2", index = "index2" } 
          }; 

そして、あなたは、データ構造を変更する必要がある場合、結果に物事を数回変更する必要はありません。

p.s.複雑なjson

+0

+1。私もこれをやるだろう。 –

+5

ASP.NETとWeb Tools 2012をお持ちの場合は、この素晴らしい[JSONをクラスとして貼り付ける](http://blogs.msdn.com/b/webdev/archive/2012/12/18/paste-json-as)もあります。 -classes-in-asp-net-and-web-tools-2012-2-rc.aspx)feature :) – khellang

+0

@KristianHellangそれについて知りませんでした。ありがとう。 ;) – Leri

5

また、匿名型を持つためHere's非常に便利なツールは、(私はこれを行うにはないを好む) - これは単なるアプローチがあります。

void Main() 
{ 
    var x = new 
    { 
     items = new[] 
     { 
      new 
      { 
       name = "command", index = "X", optional = "0" 
      }, 
      new 
      { 
       name = "command", index = "X", optional = "0" 
      } 
     } 
    }; 
    JavaScriptSerializer js = new JavaScriptSerializer(); //system.web.extension assembly.... 
    Console.WriteLine(js.Serialize(x)); 
} 

結果:

{"items":[{"name":"command","index":"X","optional":"0"},{"name":"command","index":"X","optional":"0"}]}

+0

これは各値にバックスラッシュをつけます。たとえば、\ command – Sami

-4
new {var_data[counter] =new [] { 
       new{ "S NO": "+ obj_Data_Row["F_ID_ITEM_MASTER"].ToString() +","PART NAME": " + obj_Data_Row["F_PART_NAME"].ToString() + ","PART ID": " + obj_Data_Row["F_PART_ID"].ToString() + ","PART CODE":" + obj_Data_Row["F_PART_CODE"].ToString() + ", "CIENT PART ID": " + obj_Data_Row["F_ID_CLIENT"].ToString() + ","TYPES":" + obj_Data_Row["F_TYPE"].ToString() + ","UOM":" + obj_Data_Row["F_UOM"].ToString() + ","SPECIFICATION":" + obj_Data_Row["F_SPECIFICATION"].ToString() + ","MODEL":" + obj_Data_Row["F_MODEL"].ToString() + ","LOCATION":" + obj_Data_Row["F_LOCATION"].ToString() + ","STD WEIGHT":" + obj_Data_Row["F_STD_WEIGHT"].ToString() + ","THICKNESS":" + obj_Data_Row["F_THICKNESS"].ToString() + ","WIDTH":" + obj_Data_Row["F_WIDTH"].ToString() + ","HEIGHT":" + obj_Data_Row["F_HEIGHT"].ToString() + ","STUFF QUALITY":" + obj_Data_Row["F_STUFF_QTY"].ToString() + ","FREIGHT":" + obj_Data_Row["F_FREIGHT"].ToString() + ","THRESHOLD FG":" + obj_Data_Row["F_THRESHOLD_FG"].ToString() + ","THRESHOLD CL STOCK":" + obj_Data_Row["F_THRESHOLD_CL_STOCK"].ToString() + ","DESCRIPTION":" + obj_Data_Row["F_DESCRIPTION"].ToString() + "} 
     } 
    }; 
+3

これはどのように質問に答えますか? – bummi

関連する問題