正在尝试反序列化以下JSON字符串:
string json = "{\"d\":{\"__metadata\":{\"id\":\"http://my.dev.int:8000/sap/opu/odata/sap/ZFIORI_SERIAL_NUMBERS_SRV/MATERIALSet('250')\",\"uri\":\"http://my.dev.int:8000/sap/opu/odata/sap/ZFIORI_SERIAL_NUMBERS_SRV/MATERIALSet('250')\",\"type\":\"ZFIORI_SERIAL_NUMBERS_SRV.MATERIAL\"},\"MATNR\":\"250\",\"MAKTX\":\"X:K10/MF250\"}}";
转换为类对象
namespace Scanner.Model
{
public class Material
{
public string MATNR { get; set; }
public string MAKTX { get; set; }
}
}
我尝试过很多方法,包括:
Material material = JsonSerializer.Deserialize<Material>(json, new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true,
IgnoreNullValues = true,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
});
Console.WriteLine(material.MATNR); //expected output: 250
Console.WriteLine(material.MAKTX); //expected output: X:K10/MF250
但是material.MATNR和material.MAKTX始终为空。
2条答案
按热度按时间46scxncf1#
我认为您需要更熟悉Json结构,
Material
不是您的Json字符串中返回的对象类型,它是主对象的嵌套类,我已经组装了一个点网小提琴并测试了这将为您工作,如您所见,主对象是我称之为MyJson
的对象,它拥有类类型为MetaData
的一个属性和属性名称d
,该类包含3个属性:类型MetaBase
,包含3个string
类型的属性和2个其他string
属性,然后将json字符串反序列化为MyJson
的主对象类型,然后将嵌套属性MATNR
写入控制台窗口,这将打印250,我还使用JsonPropertyNameAttribute
将某些类属性设置为json字符串中的匹配值,你可以在这里读到更多信息:system.text.json.serialization.jsonpropertynameattribute在这里拨弄:dotnet-fiddle:rpppsulh2#
因为你只需要材料