Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用DataContractJsonSerializerSettings解析JSON中的字典,不使用头类_C#_Json_Datacontractjsonserializer - Fatal编程技术网

C# 使用DataContractJsonSerializerSettings解析JSON中的字典,不使用头类

C# 使用DataContractJsonSerializerSettings解析JSON中的字典,不使用头类,c#,json,datacontractjsonserializer,C#,Json,Datacontractjsonserializer,我正在将一个JSON字符串解析为一个项目列表。json文本将这些项组织为父项“material”下的字典。下面的代码可以工作。在我不需要MaterialHeader类的情况下,有没有更好的方法来实现这一点 public class Material { public Material() { E = 209000; nu = 0.3; } public double E; public double nu; publ

我正在将一个JSON字符串解析为一个项目列表。json文本将这些项组织为父项“material”下的字典。下面的代码可以工作。在我不需要MaterialHeader类的情况下,有没有更好的方法来实现这一点

public class Material
{
    public Material()
    {
        E = 209000;
        nu = 0.3;
    }
    public double E;
    public double nu;
    public double ultimateStrength; // new
    public double enduranceLimit; // new
    public double yieldStrength;  // new
    public double density; // new
    public double sB0; //  new
    public String itemNumber; // new

    public string form; // not needed for FEA
    public string description; // not needed for FEA
    public double cost; // not needed for FEA
}

public class MaterialHeader
{
    public Dictionary<String,Material> material;
}

    public List<Material> Materials(String companyID) {

        var response = "{ \"material\": { \"PM00000050\": { \"cost\": \"1.6\",\"E\": \"209000\",\"yieldStrength\": \"306\",\"description\": \"1045\",\"form\": \"Plate\",\"nu\": \"0.3\",\"enduranceLimit\": \"256\",\"sB0\": \"409\",\"ultimateStrength\": \"570\",\"density\": \"7.85\"},\"PM00000051\": { \"cost\": \"1.62\",\"E\": \"209000\",\"yieldStrength\": \"270\",\"description\": \"4140\",\"form\": \"Plate\",\"nu\": \"0.3\",\"enduranceLimit\": \"243\",\"sB0\": \"409\",\"ultimateStrength\": \"540\",\"density\": \"7.85\"},\"PM00000055\": { \"cost\": \"1.61\",\"E\": \"209000\",\"yieldStrength\": \"306\",\"description\": \"K1045\",\"form\": \"Bar\",\"nu\": \"0.3\",\"enduranceLimit\": \"256\",\"sB0\": \"409\",\"ultimateStrength\": \"570\",\"density\": \"7.85\"},\"PM00000056\": { \"cost\": \"1.62\",\"E\": \"209000\",\"yieldStrength\": \"270\",\"description\": \"K4140\",\"form\": \"Bar\",\"nu\": \"0.3\",\"enduranceLimit\": \"243\",\"sB0\": \"409\",\"ultimateStrength\": \"540\",\"density\": \"7.85\"} }}";

    DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings();
        settings.UseSimpleDictionaryFormat = true;

        var serializer2 = new DataContractJsonSerializer(typeof(MaterialHeader), settings);
        var ms2 = new MemoryStream(Encoding.Unicode.GetBytes(response));

        var output1 = new MaterialHeader();
        try
        {
            output1 = (MaterialHeader)serializer2.ReadObject(ms2);
        }
        catch (SerializationException exp)
        {
            System.Windows.Forms.MessageBox.Show(exp.Message);
        }

        var output2 = new List<Material>();
        foreach ( var item in output1.material)
        {
            item.Value.itemNumber = item.Key; // Set the item number
            output2.Add(item.Value);
        }

        return output2;
    }
公共类材料
{
公共材料()
{
E=209000;
nu=0.3;
}
公共双E;
公共双怒;
公共双重终极力量;//新
公共双enduranceLimit;//新
公共双屈服强度;//新
公共双密度;//新
公共双sB0;//新建
公共字符串itemNumber;//新建
公共字符串形式;//FEA不需要
公共字符串描述;//FEA不需要
公共双重成本;//FEA不需要
}
公共类材料标题
{
公共词典材料;
}
公共列表材料(字符串公司ID){
“1.6\”,“E\”:“20.9万\”,“E\”:“20.9万\”,“屈服强度强度”:“306\””,“材料”材料\””,“描述\”,“描述\”,“描述\”:,“材料\”,“描述\”,“描述\”,“描述\”,“描述\”::,,,,“描述\”::::,,,,,,,,,“描述\”,,,,,,,,,,,,,“描述\”,,,,,,,,,,,,,,,,,,,,,,,,,,“描述\,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,“形式:,,,,“表格:,,,,,,,,,,,,“209000”,“屈服强度”\“金属板”和“nu\”::“0.3\”,“非”努”努:“:“0.3\”,“持久性非金属材料试验”以及“持久性非金属金属材料试验”对::“243\”,,“sB0\”,,“描述描述”描述:“,“描述描述描述”描述:“,“描述描述”描述”描述:“,“描述”描述”描述:“,,“描述”描述”描述:“:“4140 40.40\,,,,,,,“描述”描述”描述”描述”描述:“,,,,,,,“描述”描述”描述”描述:“,,,,,,,,,,,“最终强度::“最终强度:“:“强度:“::::“强度:“,,,,,,,,,,“最终强度:“::::“强度:,,,,,,,,,,,,,,,,“最终强度:,,,,,,:“0.3\”,“持久禁欲”:“256\”,“sB0\”“409\”,“409\”,,“最终强度”以下的“409\”,“最终强度”以下的“强度”以下的“强度”以下的“密度”以下的“7.85\”,“PM00000056\”,,“409\”,,“409\”,,“最终强度”以下的“409\”,,“最终强度”以下的“最终强度”以下的“409\”,,,“密度”密度::“7.7.7.85\”,“密度:”,“7.7.85\”,“7.85\”,,“7.7.85\”,,,,“密度:”,,,,“形式:”:“形式:”:“酒吧”“酒吧”“酒吧”“酒吧”“酒吧”“酒吧”,“努”“努”“纽”“努”“努”“努”“0.3”,“0.3”,“0.3”,“0.3”,“0.3”,“0.3”,“0.3”,“0.3”,“0.3”,“0.3}”;
DataContractJsonSerializerSettings设置=新建DataContractJsonSerializerSettings();
settings.useSimpleditionAryFormat=true;
var serializer2=新的DataContractJsonSerializer(typeof(MaterialHeader),设置);
var ms2=newmemoryStream(Encoding.Unicode.GetBytes(response));
var output1=新材料标题();
尝试
{
output1=(MaterialHeader)serializer2.ReadObject(ms2);
}
catch(SerializationException exp)
{
System.Windows.Forms.MessageBox.Show(exp.Message);
}
var output2=新列表();
foreach(output1.material中的var项)
{
item.Value.itemNumber=item.Key;//设置项目编号
输出2.添加(项目值);
}
返回输出2;
}

您不需要一些技巧来避免它。请原封不动地使用它。您可以将其反序列化为
字典
。但您的代码看起来很好。