当前位置: 首页 > news >正文

如何修改网站标题什么是网站推广策略

如何修改网站标题,什么是网站推广策略,免费做国际网站,朋友叫我去柬埔寨做彩票网站推广目录 序列化保存C# 代码示例, 方式1 :C# 代码示例, 方式2 : 反序列化加载C# 代码示例, 方式1:C# 代码示例, 方式2: **如何序列化自定义属性**序列化和反序列化都存在的一个问题解决方式 图表是否已修改&…

目录

  • 序列化
    • 保存
      • C# 代码示例, 方式1 :
      • C# 代码示例, 方式2 :
  • 反序列化
    • 加载
      • C# 代码示例, 方式1:
      • C# 代码示例, 方式2:
    • **如何序列化自定义属性**
    • 序列化和反序列化都存在的一个问题
      • 解决方式
  • 图表是否已修改?
  • 如何在新版本中加载SfDiagram的旧版本

序列化

序列化是将SfDiagram对象的状态转换为字节流的过程,以便在需要时重新创建它们。这样的流可以存储在数据库中、作为文件或内存中。相反的过程称为反序列化。

保存

在SfDiagram中,使用DataContractSerializer进行序列化。DataContractSerializer的功能适用于SfDiagram序列化。它支持将SfDiagram保存到流中。SfDiagram会连同其所有属性一起被保存。

C# 代码示例, 方式1 :

// 将文件保存为流
SaveFileDialog dialog = new SaveFileDialog();
dialog.Title = "保存XAML";
dialog.Filter = "XAML文件(*.xaml)|*.xaml";
if (dialog.ShowDialog() == true)
{using (Stream str = File.Open(dialog.FileName, FileMode.CreateNew)){sfDiagram.Save(str);}
}

C# 代码示例, 方式2 :

  // 将保存为内存流(FileMode.Create 会覆盖已有的,FileMode.CreateNew 不会覆盖已有的)using (Stream str = File.Open(GlobalData.Instance.WfFullName, FileMode.Create)){diagram.Save(str);}

反序列化

加载

在反序列化过程中,使用保存的流来加载当前视图中的SfDiagram节点和连接器。通过这种方式,你可以通过加载适当的流继续处理之前保存的SfDiagram。

C# 代码示例, 方式1:

// 从保存的XAML文件中加载
OpenFileDialog dialog = new OpenFileDialog();
if (dialog.ShowDialog() == true)
{using (Stream myStream = dialog.OpenFile()){sfDiagram.Load(myStream);}
}

C# 代码示例, 方式2:

// 从保存的内存流中加载
using (FileStream fileStream = new FileStream(FullName, FileMode.Open, FileAccess.Read))
{diagram.Load(fileStream);
}

如何序列化自定义属性

在SfDiagram中,你不能序列化每个图表对象的Content和ContentTemplate。如果你想保留图表对象的ContentTemplate,请将它们保存在资源中,并在图表对象添加到图表页面后应用它们。

自定义类中的自定义属性,如果从SfDiagram的任何接口或任何视图模型类派生,则可以通过DataMember属性进行序列化。

C# 代码示例:

public class NodeContent : INode
{[DataMember]public string NodeType{get;set;}
}

也就是说,只要你添加了[DataMember]特性,你自己添加的属性也会被序列化!
但前提是,你的这个类是从SfDiagram的接口或任何视图模型类派生的

注意

SfDiagram的接口和视图模型类是在没有DataContract属性的情况下创建的。因此,对于从这些类派生的类,你不需要添加DataContract属性。

如何序列化自定义类

您可以借助 DataContract 属性和 SfDiagram 的 KnownTypes 属性来序列化业务类。您必须添加 DataContract 属性来序列化整个类。

(再说一次人话): 在进行序列化操作时,如果你有一个业务类(business class),并且这个类没有从任何已经标记了DataContract属性的基类(base class)继承,那么你需要给这个类添加DataContract属性来序列化整个类。简而言之,如果一个类没有继承自一个已经定义了DataContract属性的基类,那么你需要为这个类本身添加DataContract属性,以便能够对其进行序列化。

C# 代码示例:

[DataContract]
public class NodeContent
{[DataMember]public string NodeType{get;set;}
}Diagram.KnownTypes = () => new List<Type>()
{typeof(NodeContent)
};

序列化和反序列化都存在的一个问题

我自己定义一个继承自SfDiagram的接口和视图模型类的类

public class VisualNode : BpmnNodeViewModel
{[DataMember]public string? IDString { get; set; } = null;/// <summary>/// 为view窗口名称,用于打开对于节点窗口!/// </summary>[DataMember]public string NodeViewType { get; set; } = "Activity";/// <summary>/// 工作流节点类型/// </summary>[DataMember]public string StepType { get; set; } = "";/// <summary>/// 记录输入参数(为了方便Diagram自带的序列化可以进行,这里需要改为string类型)/// </summary>[DataMember]public JObject Inputs { get; set; } = null;/// <summary>/// 记录输出参数(为了方便Diagram自带的序列化可以进行,这里需要改为string类型)/// </summary>[DataMember]public JObject Outputs { get; set; } = null;
}

在C#中使用序列化时,如果遇到System.Runtime.Serialization.InvalidDataContractException错误,特别是涉及到Newtonsoft.Json.Linq.JToken类型时,通常是因为JToken类型是一个递归集合数据,这在序列化过程中不被支持。错误信息提示:“Type ‘Newtonsoft.Json.Linq.JToken’ is a recursive collection data contract which is not supported. Consider modifying the definition of collection ‘Newtonsoft.Json.Linq.JToken’ to remove references to itself.”。

JToken(包括JObjectJArray)由于其设计为可以包含自身类型的实例(例如,一个JObject可以包含另一个JObject作为其属性值),导致了递归定义,这在数据契约序列化中是不被允许的。

解决方式

将他们改成string 格式!

   /// </summary>[DataMember]public string Inputs { get; set; } = "{}";/// <summary>/// 记录输出参数(为了方便Diagram自带的序列化可以进行,这里需要改为string类型)/// </summary>[DataMember]public string Outputs { get; set; } = "{}";

JObject 存的时候先序列化

node.Outputs = JsonConvert.SerializeObject(obj);

JObject 用的时候,再反序列化即可

jsonStepData.Outputs = JsonConvert.DeserializeObject<JObject>(FirstFuncNode.Outputs);

图表是否已修改?

图表控件的HasChanges属性用于通知图表是否有未保存的更改。该属性跟踪通过交互和公共API所做的所有更改。

XAML 代码示例:

<!-- 初始化图表 -->
<Syncfusion:SfDiagram x:Name="diagram">
</Syncfusion:SfDiagram>
<!-- 初始化保存图表的按钮 -->
<Button x:Name="SaveButton" Content="保存" Click="SaveButton_Click">
</Button>
//Method to promote the save dialouge box when diagram has any unsaved changes.
private void SaveButton_Click(object sender, RoutedEventArgs e)
{if (diagram != null && diagram.HasChanges){MessageBoxResult messageBoxResult = MessageBox.Show("Do you want to save the Diagram?","SfDiagram",MessageBoxButton.YesNo);if (messageBoxResult == MessageBoxResult.Yes){SaveDiagram();}}
}//Method to save the diagram.
private void SaveDiagram()
{SaveFileDialog dialog = new SaveFileDialog();dialog.Title = "Save XAML";dialog.Filter = "XAML File (*.xaml)|*.xaml";if (dialog.ShowDialog() == true){File.Delete(dialog.FileName);using (Stream s = File.Open(dialog.FileName, FileMode.OpenOrCreate)){diagram.Save(s);}}
}

如何在新版本中加载SfDiagram的旧版本

你可以通过升级方法在新版本中加载任何旧版本的SfDiagram流。请参考以下代码示例。

C# 代码示例:

using (Stream myStream = dialog.OpenFile())
{sfDiagram.Upgrade(myStream);sfDiagram.Load(myStream);
}
http://www.ds6.com.cn/news/2582.html

相关文章:

  • ps ui做响应式网站要求138ip查询网域名解析
  • 怎么给网站做开场动画搜索引擎优化主要包括
  • 如何用rp做网站网上推广产品哪个网好
  • 网站模板怎么做搜索数据
  • 淄博网站建设 优易科技seo网站优化培训
  • 网站开发详情aso优化方法
  • 网站后台照片限制200k怎么修改重庆镇海seo整站优化价格
  • 邢台如何做企业网站广告优化师适合女生吗
  • 怎么做点击图片进入网站百度关键词查询排名
  • 新泰网站建设新闻稿
  • 三站合一网站建设百度一下你就知道了
  • 怎么做网站收款二维码视频推广
  • 客服网站制作seo建站优化推广
  • 龙山建设工程有限公司网站十大搜索引擎排名
  • 用手机怎么做网站百度推广一个月费用
  • 合肥房产网站建设站长统计app
  • 门户网站建设方案是什么意思云计算培训
  • web前端开发岗位要求苏州百度快速排名优化
  • jsp 网站开发广州百度推广排名优化
  • 网站常规后台公司seo排名优化
  • 网站建站建设seo顾问张智伟
  • 如何免费做网站网页做好网络推广
  • 用wordpress做的网站有哪些十大搜索引擎排行榜
  • 杭州网站建设费用多少国外友链买卖平台
  • 股权融资文大侠seo
  • 2022电商平台排行榜宁波seo推广哪家好
  • 关注公众号功能开发seo网站内容优化有哪些
  • 西安的电商平台网站建设免费浏览网站推广
  • 做游戏女角色去衣的网站成免费crm特色
  • 温州网站建设方案报价今日头条搜索优化怎么做