gpt4 book ai didi

serialization - 是否有 EDM/OData 类型与 CLR 类型之间的映射器?

转载 作者:行者123 更新时间:2023-12-04 06:27:54 24 4
gpt4 key购买 nike

我正在针对 Azure 表存储 REST API 编写一些代码。 API 使用 OData,通常由 .net 客户端处理。但是,我没有使用客户端,因此我需要找出另一种方法来生成/使用 OData XML。我可以使用联合类来执行 ATOM 操作,但不能使用 OData/EDM <-> CLR 映射。

有人知道 OData/EDM <-> 类型映射器和/或 CLR 对象到 OData 实体转换器吗?

谢谢,埃里克

最佳答案

下面是一些转换 XML 元素(来自 OData feed)并将其转换为 ExpandoObject 的代码。

private static object GetTypedEdmValue(string type, string value, bool isnull)
{
if (isnull) return null;

if (string.IsNullOrEmpty(type)) return value;

switch (type)
{
case "Edm.String": return value;
case "Edm.Byte": return Convert.ChangeType(value, typeof(byte));
case "Edm.SByte": return Convert.ChangeType(value, typeof(sbyte));
case "Edm.Int16": return Convert.ChangeType(value, typeof(short));
case "Edm.Int32": return Convert.ChangeType(value, typeof(int));
case "Edm.Int64": return Convert.ChangeType(value, typeof(long));
case "Edm.Double": return Convert.ChangeType(value, typeof(double));
case "Edm.Single": return Convert.ChangeType(value, typeof(float));
case "Edm.Boolean": return Convert.ChangeType(value, typeof(bool));
case "Edm.Decimal": return Convert.ChangeType(value, typeof(decimal));
case "Edm.DateTime": return XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind);
case "Edm.Binary": return Convert.FromBase64String(value);
case "Edm.Guid": return new Guid(value);

default: throw new NotSupportedException("Not supported type " + type);
}
}

private static ExpandoObject EntryToExpandoObject(XElement entry)
{
XNamespace xmlnsm = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata",
xmlns = "http://www.w3.org/2005/Atom";

ExpandoObject entity = new ExpandoObject();
var dic = (IDictionary<string, object>)entity;

foreach (var property in entry.Element(xmlns + "content").Element(xmlnsm + "properties").Elements())
{
var name = property.Name.LocalName;
var type = property.Attribute(xmlnsm + "type") != null ? property.Attribute(xmlnsm + "type").Value : "Edm.String";
var isNull = property.Attribute(xmlnsm + "null") != null && string.Equals("true", property.Attribute(xmlnsm + "null").Value, StringComparison.OrdinalIgnoreCase);
var value = property.Value;

dic[name] = GetTypedEdmValue(type, value, isNull);
}

return entity;
}

关于serialization - 是否有 EDM/OData 类型与 CLR 类型之间的映射器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7154819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com