Помощь, необходимая для преобразования объекта JavaScript в соответствующий словарь C # - PullRequest
1 голос
/ 14 июля 2011

Привет, я новичок в C #, у меня есть этот код javascript, который мне нужно преобразовать в соответствующий словарь c #

ниже приведен код javascript

 EXCHANGES = {
        "ICE": {
            source: "SPC",
            name: "ICE Futures Europe",
            assetTypes: {
                CER: {
                    spot: "ECX CER DAILY FUTURE",
                    fut: "ECX CER FUTURE"
                },
                EUA: {
                    spot: "ECX EUA DAILY FUTURE",
                    fut: "ECX EUA FUTURE"
                }
            }
        },
        "CLIMEX": {
            source: "CLX",
            name: "Climex Spot Market",
            symbols: {
                CER: {
                    spot: ["CER"]
                },
                EUA: {
                    spot: ["EUA 08-12"]
                }
            }
        },
        "BLUENEXT": {
            source: "BLNXT",
            name: "Bluenext",
            symbols: {
                CER: {
                    spot: ["1000019-82-1"]
                },
                EUA: {
                    spot: ["1000019-81-1"]
                }
            }
        }
    };

ПокаЯ управляю этим

public Dictionary<string, Dictionary<string, string>> Exchanges = new Dictionary<string, Dictionary<string, string>> {
            {"ICE ECX", new Dictionary<string, string> {
                {"source", "SPC"},
                {"name", "ICE Futures Europe"},
                {"exchange", "ICE" }
            }},
            {"Climex", new Dictionary<string, string> {
                {"source", "CLX"},
                {"name", "Climex Spot Market"},
                {"exchange", "Climex" }
            }},
            {"BlueNext", new Dictionary<string, string> {
                {"source", "BLNXT"},
                {"name", "Bluenext"},
                {"exchange", "BlueNext" }
            }},
            {"Green Exchange", new Dictionary<string, string> {
                {"source", "SPC"},
                {"name", "NYMEX: Futures"},
                {"exchange", "NYMEX" }
            }},
            {"NYMEX_FA", new Dictionary<string, string> {
                {"source", "SPC"},
                {"name", "NYMEX: Futures Acess"},
                {"exchange", "NYMEX_FA" }
            }}
        };

Может кто-нибудь из вас может подсказать мне, как правильно сделать это, любая помощь будет оценена.спасибо Pranay

Ответы [ 3 ]

3 голосов
/ 14 июля 2011

Я бы использовал JSON Parser. Как это .
Таким образом, вы можете получить свойства и значения после анализа из JObject.

string jsonText = @"{
  prop1: 1, 
  prop2: 'Some String',
  'prop3': {
    iProp1: 1,
    iProp2: 2
}";
JObject parsedJson = JObject.Parse(jsonText);
0 голосов
/ 15 июля 2011

Это то, что я делал в основном, я создал классы, так как поддержание этого уровня словаря было бы громоздким

public class Exchange
        {
            public string Source {get; set;}
            public string Name {get; set;}
            public Dictionary<string, AssetTypeSymbol> AssetTypes {get; set;}
            public Dictionary <string,AssetTypeSymbol>Symbols {get; set;}
        }
        public class AssetTypeSymbol
        {
            public IList<string> Spot {get; set;}
            public IList<string> Fut {get; set;}
        }

    public Dictionary<string,Exchange> Exchanges = new Dictionary<string,Exchange>
    {
            {"ICE ECX", new Exchange() {
                Source = "SPC",
                Name = "ICE Futures Europe",
                AssetTypes = new Dictionary<string, AssetTypeSymbol>() {
                    {"CER", new AssetTypeSymbol() {
                        Spot = new string[] { "ECX CER DAILY FUTURE" },
                        Fut = new string[] { "ECX CER FUTURE" }
                    }},
                    .......... and so on 
0 голосов
/ 14 июля 2011

Я бы попробовал ExpandoObject , который является динамическим и реализует IDictionary. Например, вы можете написать следующий код:

dynamic x = new ElasticObject();
x.Ice = new ExpandoObject();
x.Ice.Source = "SPC";
x.Ice.Name = "Ice Futures Europe";
x.AssetTypes = new ExpandoObject();
x.AssetTypes.CER = new ExpandoObject();
x.AssetTypes.CER.Spot = "EXC CER DAILY FUTURE";
x.AssetTypes.CER.Fut = "EXC CER FUTURE";
x.EUA = new ExpandoObject();
x.EUA.Spot = "ECX EUA DAILY FUTURE";
x.EUA.Fut = "ECX EUA FUTURE";

На MSDN вы можете узнать больше о ExpandoObject здесь .

Если вам нужен еще более умный объект, существует ElasticObject (описан здесь ).Используя его, вы можете пропустить объявление вложенных Expandos, например:

dynamic x = new ExpandoObject();
x.Ice.Source = "SPC";
x.Ice.Name = "Ice Futures Europe";
x.AssetTypes.CER.Spot = "EXC CER DAILY FUTURE";
x.AssetTypes.CER.Fut = "EXC CER FUTURE";
x.EUA.Spot = "ECX EUA DAILY FUTURE";
x.EUA.Fut = "ECX EUA FUTURE";

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...